Linux操作系统在定制PMP DM320的应用解析

嵌入式操作系统

57人已加入

描述

  linux

  Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

  Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。

  严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。

  PMP软件体系框架

  PMP软件最底层是操作系统层,该层主要包括 Bootloader引导程序和嵌入式Linux操作系统。 Bootloader主要完成系统从Flash的启动、硬件各部分的初始化、LOGO的显示以及OS的引导:嵌入式 Linux主要包括经过定制的适合在DM320上运行的 Linux操作系统。

  Bootloade r:引导程序的定制

  DM320下的Bootloader的启动过程

  Bootloader是指系统启动后,在操作系统内核运行之前运行的一段小程序。不同的Bootloader的安装介质Flash,系统的启动过程是不一样的。

  1)当安装介质为NOR Flash时,Bootloader就可以直接在Flash闪存内运行,不必把代码拷贝到系 ①收稿时I‘a-]:2008—1 2-1 9 统RAM中。启动方式设置成外部Memory,这样ARM 的开始地址就从0xFFFF:0000开始。然后在 Bootloader的程序中,把入口地址设置成 0xFFFF:0000即可。

  2)当安装介质为NAND Flash时,系统上电以后,运行ROM里面的启动代码,选择启动方式为: AIM(Arm Internal Memory)ROM,ARM的开始地址为0×0000:O000。然后ROM里的程序会拷贝NAND Flash里的User Bootloader到处理器内部的RAM。再次,执行User Bootloader程序,完成初始化 SDRAM和驱动NAND Flash的读能力等少量工作。最后初始化系统,将NAND Flash中的主Bootloader 拷贝到SDRAM中执行,拷贝完成后,要把存放主 Bootloader的内存地址,赋值给pc(Program Counter)指针o

  DM320下Bootloader启动程序的定制

  本PMP使用的Bootloader为U-Boot。从 Internet上得到开源的U—Boot程序,然后对DM320 特有硬件环境进行初始化工作。

  1)修改Makefile和Kconfig,目的是生成适合 DM320平台的配置选项以及目标文件。在./Makefile (当前目录均为U—Boot源码树根目录)下加入如下语句:

  dm320一config:unconfig @./mkconfig S(@:一config=)arm arm926ejs dm320

  其中mkconfig为一个脚本文件,参数为 (Target,Architecture,CPU,Board)分别对应上面的四个参数($(@:一config=)arm arm926ejs dm320)。

  2)在U—Boot源码树下创建文件夹./board/ dm320。存放与DM320平台有关的文件。

  3)在./board/dm320/platform.S中加入对 DM320寄存器初始化赋值语句,在./cpu/arm 926ejs中对cpu.C和start.S修改,前者提供有关cpu 操作的函数,后者为cpu执行时的初始化代码。

  4)./lib—arm/board.C是完成初始化操作的主要文件。在文件中定义了一个初始化序列: init—fnc_t★init—sequence[】=l cpu—init. P basic cpu dependent setup+| board—init。|+basic board dependent setup+| interrupt—init.|+set up exceptions’| env_init。|’initialize environment‘| init—baudrate。|+initialize baudrate settings+| serial—init.|+serial communications setup‘} console—init』, /+init console★/ display—bannerl|’say that we are here‘| dram—init.|+configure available RAM banks’| display—dram—config, #if defined(CONFlG—VCMA9) checkboard, #endif NULL, ):上述数组中函数序列依次执行。在完成初始化序列后,将是一些特定的操作。

  Linux内核的定制

  本系统中采用的Linux内核版本号为2.6.50要定制Linux内核,不仅要修改内核源码树,而且要编写相关外围设备的驱动程序。使之成为一个适合 DM320运行的OS环境。

  Kconfig文件的修改 Kconfig文件是用来对所要加载内核内容进行配置的文件,其脚本语言描述参考.\Documentation \kbuild。

  首先,在内核目录下./arch/arm/Kconfig中加入DM320的配置选项,将DM320框架加入内核,这样才能在执行make menuconfig配置内核时看到 DM320框架。修改内容如下:

  choice

  prompt”ARM system type”

  default ARCH—DM320—20

  表示:在配置ARM架构的系统时:默认的就是 DM320框架。

  source”arch/arm/mach-dm320-20/Kcon f.g”

  表示:把DM320框架下的配置选项也引入,同时把其他CPU框架去掉,这样方便选择。比如: #source”arch/arm/mach-clps71 1 x/Kconfig”

  #source”arch/arm/mach-integrator/Kconfi g“(“孝”表示注释掉相关的内容)

  最后把内核配置选项中对DM320开发有用的选进来。比如:

  source”drivers/char/Kconfig”

  if(1ARCH—DM320一20) source”sound/Kconfig” endif

  表示:需要开发字符设备的驱动,而不需要声音的支持。

  因为要把CODEC编入内核,所以还要加入对 CODEC支持的配置选向。

  source”codecs/modules/Kconfig” 如果要加入一个新的外围设备,也需要在Kconfig 文件中加入相应的内容。比如说要加入一个三星的4 寸TFT—LCD的驱动,就需要修改./drivers/char/ Kconfig文件,并加入以下内容:

  config DM 3 20..SAMSU NG..4..LCD

  tristate”DM320 SAMSUNG 4.0 inch 1 6:9 TFT LCD”

  depends on ARCH—DM320—20 && BOARD一400H

  default Y

  help

  This driver provides support for SAMSUNG 4.0’1 6:9 TFT—LCD

  for DM320 Platform.

  config DM320一SAMSUNG一4一LCD:表示增加

  新的配置入口。一旦这个配置选项被选中就会在./include/Iinu×/autoconf.h中有:#define CONFIG—DM320一SAMSUNG一4一LCD 1

  这样整个内核源码中都可以使用CONFIG— DM320—SAMSUNG一4一LCD进行特定选择。

  tristate”DM320 SAMSUNG 4.0 inch 1 6:9 TFT—LCD”:在引号里的内容是在配置选项中的提示文字。tristate表示除了可以选择【+】,【】外。还可以选择【M】,表示把当前内容当成模块编译。

  depends on ARCH—DM320—20&&BOARD一 400H:如果配置平台框架时选择了ARCH—DM 320—20,在选择型号时选择BOARD一400H,就能看到三星4寸T丌一LCD配置选项。

  default Y:表示默认把此驱动编入内核。

  help:help的内容为对内核进行配置时。选中帮助选项所看到的内容。

  Makefile文件的修改

  Makefile根据配置文件.config形成编译源文件列表,GNU编译工具对源文件进行编译,把目标代码链接在一起,形成Linux内核二进制文件。Makefile 分布在各源代码目录中。

  在作者所进行的PMP设备开发中,首先是对主 Makefile的修改,比如:

  ARCH:=arm

  CROSS—COMPILE:=arm—linux一(对编译器的选项修改为ARM平台)

  E×TRAVERSION=-our0

  EXT卧WERSlON变量值被附加在内核版本编号之后,成为内核建立后自勺最终版本。项目中使用的内核版本号为2.6.5,加上EXTRAVERSION变量后,最终的版本就是2.6.5一our0,表示开发过程中零号内核版本。

  对其他子目录的Makefile文件的修改则相对容易。以加入三星4寸TF丁一LCD驱动为例说明,当需要把此驱动模块加入相应的内核源码树时,要在./drivers/char/MakefiIe文件中加入如下内容: obj一$(CONFIG—DM320一SAMSUNG一4一LCD)-I-= dm320一Icd—samsung4.0

  总结

  本文探讨了嵌入式Linux在PMP消费类电子产品上的应用,并实现了启动程序Bootloader和Linux 内核的移植和定制。目前一些项目产品已经过严格测试,成功推向市场。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分