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 内核的移植和定制。目前一些项目产品已经过严格测试,成功推向市场。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)