uclinux表明micro-control linux.即“微控制器范畴中的Linux体系”,是Lineo公司的主打产品,一起也是开放源码的嵌入式Linux的模范之作。uCLinux主要是针对方针处理器没有存储办理单元MMU(Memory Management Unit)的嵌入式体系而规划的。它现已被成功地移植到了许多渠道上。由于没有MMU,其多任务的完结需求必定技巧。
uClinux是嵌入式Linux范畴非常重要的分支,已成功应用于路由器、机顶盒、PDA等范畴,与规范Linux在内存办理方面有着实质的差异。
Uclinux的装备和削减也是运用的华恒科技供给的源码包(用于hhbf531学习板)。咱们运用的开发板信息如下:
CPU:BF533
FLASH:S29AL004D-512KB
SDRAM:HY57V281620-16MB
这儿我不敢说“uclinux的移植”,而仅仅以“装备与削减”代之,是由于我觉得自己的作业真的谈不上什么移植。现成的源码包,一切的底层驱动都现已完结,咱们所要做的仅仅挑选自己需求的驱动、装备一下内核、做一些削减作业罢了。常常听到其他人说到“最近又完结了TImes;TImes;TImes;渠道的linux移植”,我都会有点忧虑:国内有多少工程师能真正从最初始的作业开端,完结一个渠道的体系移植——应该很少吧。
下面,我分以下进程简略介绍一下我的装备进程。
一,装备并在RAM中运转内核(不带根文件体系):
由于咱们的flash空间有限,在没有削减之前,就算不带根文件体系,也无法烧写到flash内保存;所以先测验下载到RAM中运转。别的,咱们现在的开发板上没有网络功用,只能通过串口下载,所以在这儿装备内核的进程中,做一些简略削减,以便节省下载时刻。
解压源码包后,进入uclinux目录:
#cd uClinux-dist
设定穿插东西链:
#PATH=”/usr/local/bin/gcc-bfin-3.4-uclinux/bin/:$PATH”
进入装备:
#make menuconfig
运转后,进入“MainMenu”装备页,能够在此挑选Vender/Product和Kernel/Library/Defaults等内容。依据咱们运用的渠道,咱们挑选:Vender-AnalogDevices,Product-HHBF533(或许HHBF531),Libc-uClibc;假如要装备内核和应用程序还要别离选中“Customize Kernel SetTIngs”、“Customize Vender/User Settings”。退出保存后,将顺次进入装备内核和装备应用程序页。
假如想独自装备内核,能够进入目录linux-2.6.x/内运转“make menuconfig”。装备应用程序在这个源码包里如同没有独自的config选项。这些关于内核源码包结构的基本知识,需求咱们提早了解。
下面,咱们来装备内核。
装备一个能够在咱们的SDRAM中运转的内核很简略,由于底层作业都现已完结。咱们只需求装备一下处理器相关内容即可。处理器选项坐落内核装备页的“Blackfin Processer Options”。进入该装备页,进行如下装备:
CPU – BF533
System type – BF533-HHBF
Board Customizations – 依据你的开发板时钟、SDRAM信息装备,其他不必修正。
Clock Settings – 撤销“Re-programClocks while Kernel boots”,默以为u-boot的时钟装备。
其他选项不必修正,各项装备功用介绍见文档《附.Linux 2.6.19.x内核编译装备选项简介》。
以上装备正确后,下载到你的开发板上,应该就能够运转了。但通过串口下载速度太慢,咱们先去掉一些不需求的驱动。由于咱们没有网络功用,所以把网络及其驱动悉数撤销,能够削减150KB左右的空间;咱们也不需求音视频功用,所以把音视频驱动也撤销,又能够减小很大空间。如此装备后,咱们能够测验下载到SDRAM中运转了。
现在,咱们还不想削减根文件体系,所以,咱们想得到一个不带根文件体系的紧缩内核镜像。由于华恒供给的源码包,编译后不能得到紧缩的不带根文件体系的镜像,所以咱们要通过修正Makefile得到咱们需求的编译成果。
需求修正的Makefile坐落uClinux-dist目录下,翻开该Makefile,在“.PHONY:linux”项的”ln –f $(LINUXDIR)/vmlinux $(LINUXDIR)/linux;\”句子后,增加以下内容。
这样在uClinux-dist目录下履行“make linux”就能够生成紧缩的不带根文件体系的内核镜像了,该镜像文件为uImage.bin,坐落linux-2.6.x目录内。现在,能够将得到的内核下载到SDRAM中运转了。由于是紧缩内核,所以运转时要运用u-boot的bootm指令。至于u-boot指令的运用方法,自行学习。
Makefile也是编译内核的基础知识,需求咱们逐渐把握。
这样,该步的作业就能够告一段落了。
下载到SDRAM中,假如解压后无法运转,先检查一下上述装备操作是否有误。假如确认无误,就需求剖析内核的履行进程,仔细剖析问题了。接下来简略介绍一下内核履行流程。
二,内核履行流程:
接受上篇《u-boot引导uclinux进程剖析》,介绍内核发动流程。
A,内核vmlinux进口
u-boot履行“(*appl)(cmdline);”句子后,控制权就移交给linux内核,appl变量指向的地址便是linux内核的首地址。
Linux内核履行的第一个文件是/linux-2.6.x/arch/blackfin/mach-bf533/head.S。通过一系列的初始化,跳转到start_kernel()函数,即进入linux体系初始化阶段。
B, Linux体系初始化
Start_kernel()函数坐落文件/linux-2.6.x/init/main.c中,是linux内核通用的初始化函数。不管关于什么体系结构的linux,都要履行这个函数。
Start_kernel()函数担任初始化内核各子体系,最终调用rest_init(),发动一个叫作init的内核线程,持续初始化。