如何构建嵌入式Linux系统_第1页
如何构建嵌入式Linux系统_第2页
如何构建嵌入式Linux系统_第3页
如何构建嵌入式Linux系统_第4页
如何构建嵌入式Linux系统_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 HYPERLINK HYPERLINK 目 录TOC TOC 构建嵌入式Liinux系统1.取本实验相相关的软件包包到ftp下载以以下软件包: 文件名备注binutills-2.116.1.ttar.bzz2 gccc-4.0.2.tarr.bz2 glibcc-2.3.6.tarr.bz2 glibcc-linuuxthreeads-22.3.6.tar.bbz2 liinux-.taar.bz22 linuux-libbc-heaaders-.ttar.bzz2 制作交叉编译工工具链所需的的源码包 crosstoool-0.43.taar.gz制作交叉编译工工具链的脚本本和补丁 cros

2、stoool.taar.bz22已制作好的交叉叉编译工具链链,需要解包包到/opt目录使用 linux-22.6.277.tar.bz2内核2.6.227 patch-22.6.277-aka针对2440开开发板制作的的内核patchh zImage已编译好的内核核,可直接下下载到开发板板 rootfs-basicc.tar基本根文件系统统打包,由于于有设备文件件,所以解包包需要root权限 rootfs-basicc.crammfs采用cramffs文件系统格格式的基本根根文件系统映映像,可直接接下载到开发发板 busyboxx-1.9.1.tarr.bz2busyboxx源码包,嵌嵌入式根

3、文件件系统基本命命令集 sqlite-3.4.00.tar.gzsqlite源源码包,嵌入入式数据库 libcgi-1.0.ttar.gzzlibcgi源源码包,用于于编写CGI程序的C函数库 qtopia-core-openssourcee-src-4.2.22.tar.gzQtopia Core源码包,Qt的嵌入式版版本 2.交叉编译工工具链要做嵌入式Liinux开发,首先先需要有交叉叉编译工具链链(crosss comppilingg toollchainn),也就是是在主机(x86 PPC)上可编译译生成目标板板可执行文件件(ARM指令)的编编译工具。和和普通的编译译工具链一样样,交叉

4、编译译工具链也包包括编译、链链接、修改目目标文件的各各种程序,如如gcc、glibc、ld、gas、objduump、readeelf等等。交叉叉编译工具链链本身也是需需要编译生成成的,要得到到一套完整的的交叉编译工工具链需要编编译以下源码码包: binutills gcc glibc linux(内内核) linux-llibc-hheaderrs glibc-llinuxtthreadds 这些源码包具有有非常强的版版本依赖关系系,如果源码码包的版本不不匹配,在编编译过程中会会出现各种各各样的问题,有有些问题需要要对源码做些些修改或者打打补丁,有些些问题则是没没有解决办法法的,只能更更换匹

5、配较好好的版本。编编译的步骤也也是比较复杂杂的,主要有有以下几步: 根据目标平台配配置内核源代代码,生成内内核头文件 编译binuttils 编译器的自举(bootsstrap),也就是是先编译出gcc的部分功能能(没有glibc支持,只有C编译器没有C+编译器) 编译glibcc 编译完整的gccc 首先从 stoool 下载crossstool-0.43.tar.ggz,在主目录录下解包 $ tar xf crrosstoool-0.43.taar.gz; cd ccrossttool-00.43现在选择一种源源码包的版本本组合,各种种版本组合的的兼容性可以以参考 l/croosstooo

6、l-0.443/buiildloggs/ ,在此我们们选择在arm平台上glibc版本较高,兼兼容性较好的的一个组合: gcc-4.00.2 cgcc-4.0.2 glibc-22.3.6 binutills-2.116.1 linux- hdrs- 修改crossstool-0.43目录下的脚脚本demo-arm.ssh,取消这一一行开头的#号注释符: #eval cat aarm.daat gccc-4.0.2-gliibc-2.3.6.ddat ssh alll.sh -noteest同时将原本没有有注释的这一一行注释掉(前前面加#号): eval ccat arrm.d

7、att gcc-4.1.00-glibbc-2.33.2-tlls.datt sh all.ssh -nnotestt注意该脚本开头头有 TARBALLLS_DIRR=$HOMME/dowwnloaddsRESULT_TOP=/opt/ccrossttool这说明,该脚本本运行时,自自动从 和 下载相关的的源码包到主主目录的downlloads目录下,如如果你已经下下载过这些源源码包,将它它们拷到downlloads目录下就可可以不必再次次下载了。对对应于我们选选择的版本组组合,downlloads目录下的源源码包有: binutills-2.116.1.ttar.bzz2 gcc-4.00.

8、2.taar.bz22 glibc-22.3.6.tar.bbz2 glibc-llinuxtthreadds-2.33.6.taar.bz22 linux-.taar.bz22 linux-llibc-hheaderrs-0.tar.bz2 整个编译结束后后,交叉编译译工具链将放放在/opt/crossstool目录下,因因此脚本需要要在/opt下建子目录录,如果不希希望使用root权限运行该该脚本,则需需要事先给/opt目录设置写写权限: $ sudoo chmood a+ww /optt然后修改armm.dat,其中有 TARGET=arm-uunknowwn-linnux-gnnu这是

9、按标准的命命名规则为工工具链命名的的,但是通常常我们都采用用更简单的命命名,很多软软件的Makeffile中交叉编译译器默认也都都采用简单的的命名,为此此我们把它改改为TARGEET=armm-linuux。 由于编译过程需需要用到patch、bison、flex,确认你的系系统中安装了了这些软件包包。 在编译过程中可可能还会遇到到脚本的兼容容性问题,如如果你的Linux发行版将sh指向dash(例如Ubuntu),应将其其改指向bash: $ cd /bbin$ sudo ln -ssf bassh sh虽然用dashh执行脚本时时非常高效并并且其实现完完全遵守POSIX标准,然而而现存的很

10、多多脚本(比如如glibc中的脚本)有有不符合POSIX标准的用法法,所以仍需需改用bash执行。 准备就绪后,在在crossstool-0.43目录下运行demo-arm.ssh脚本开始编编译。编译完完成后,交叉叉编译工具链链的可执行文文件位于/opt/crossstool/gcc-44.0.2-glibcc-2.3.6/armm-linuux/binn目录,我们们可以把这个个路径添加到PATH环境变量中中,例如将以以下命令添加加到/.baashrc启动脚本: export PATH=$PATHH:/optt/crossstooll/gcc-4.0.22-glibbc-2.33.6/arrm

11、-linnux/biin此外,网上也可可下载到已编编译好的交叉叉编译工具链链,比如 ,但是使用别别人编译好的的交叉编译工工具链有很多多限制,不能能按自己的特特殊需要对其其定制,比如如有些项目需需要特定版本本的gcc和glibc,再比如需需要soft-ffloat的编译器(生生成指令模拟拟浮点数运算算)。 以上编译步骤需需要很长时间间,也可以直直接从ftp下载已制作作好的交叉编编译工具链安安装到主机: $ sudoo chmood a+ww /optt$ tar xf crrosstoool.taar.bz22 -C /opt然后在/.bbashrcc启动脚本中中修改PATH环境变量。 3.熟悉

12、开发环环境3.1 U-bboot的基本使用用方法连接好开发板的的网线和串口口线,启动miniccom(配置成1152000 8N11,无Flow Contrrol)。按下开开发板电源,立立刻按除回车车以外的任意意键,进入bootlloaderr提示符AKAE22440#。如果没来来及按键就已已经启动了内内核,可以按按开发板上的的RESET键重来。 注意:u-booot的终端不能能处理控制字字符,不要用用移动光标键键或翻页键等等,退格键可可以用。按了了产生控制字字符的键再输输入命令就会会产生错乱,这这时可以按下下回车输入当当前这条已经经错乱的命令令,然后在新新的提示符下下重新键入命命令。 输入p

13、rinttenv命令显示bootlloader的参数。 更改参数使用命命令set或者setennv,如下图所所示:上图中,setenv ipadddr 1192.1668.1.222表示设置开开发板的IP地址为192.1168.1.22。setenv netmmask 255.2255.2555.0表示设置子子网掩码为255.2555.2555.0。setenv servverip 1表示设置与与开发板相连连的PC机IP是192.1168.1.21。可以根据你的情情况重新设置置。为了统一一起见,在后后面的实验中中,我们统一一设置为: AKAE24440 # sset i

14、ppaddr 192.1168.2.100AKAE24440 # sset seerveriip 191 (这一项应应该和你的主主机IP一致)AKAE24440 # sset neetmaskk 255.255.2255.0AKAE24440 # sset gaatewayy 1 (网关ip设置成什么么无所谓,一一般都设为主主机ip)AKAE24440 # ssavesave将这些些设定写入fflash中中,下次开发板板上电时仍然然有效。如果果不save则仅改变内内存中的参数数值,reset后会恢复flash中原来的参参数值。 设置完成后在开开发板上

15、ping 主机的ip地址,检查查网络是否正正常,如下所所示:AKAE24440 # pping 1192.1668.2.221host 1992.1688.2.211 is aalive这表示主机能pping通,网络正正常。如果显显示如下:AKAE24440 # pping 1192.1668.2.221ping faailed; hostt 1 iis nott alivve.这就表示主机不不能ping通,网络异异常,需要检检查你的网络络。还有一些常见的的参数:AKAE24440 # sset boootdellay 3Bootdellay设为3,表示开发发板上电后等

16、等待3秒再启动,这这3秒时间内按按任意键会进进入u-boot命令行状态态,如下图所所示:另外,还有:AKAE24440 # sset boootmodde nfss或者AKAE24440 # sset boootmodde nanndBootmodde 可以设为nfs或者nand两者之一,这这个参数表明明了u-booot启动时,根根文件系统在在哪里寻找,如如果是nand表示根文件件系统保存在在开发板本身身的flash某个分区中中,要到flash上去找;如如果是nfs则表示u-booot要去你的PC机的nfs服务的目录(PC机硬盘上)去找。在开发板boootloadder输入以下命命令查看64M

17、 fllash是如何分区区的。 AKAE24440 # mmtdparrtsDevice nand00 . # partss = 4#: namee ssize offseet mask_flagss0: u-booot 0 xx001000000 0 x0000200000 01: kernnel 0 xx002000000 0 x0011000000 02: ext22 0 xx010000000 0 x0033000000 03: tempp 0 xx02d000000 0 x0133000000 0u-boot分分区保存bootlloaderr程序,Linux内核保存在kerneel分

18、区,根文文件系统会保保存到ext2分区, temmp分区本实验验中没有用到到。 如果mtdpaarts命令未显示示上述图样,可可能是flash未作分区操操作,可以使使用mtdpaarts ddefaullt命令来创建上述述那样的默认认分区。如下下图所示: 如果要保存新的的分区表,使使用命令save保存到flash中,否则reset后将恢复flash中原来的分分区表。 下载文件到开发发板内存中,需需要通过tftp协议。开发发板是tftp客户端,主主机是tftp服务器。在在配置好主机机的tftp服务之后,主主机上会有一一个tftp服务的主目目录/tt,我们把要要下载到开发发板上的文件件都先拷贝到到

19、这个目录中中,之后才能能下载。tftp命令的格式式为 tftpp 文件名。注注意我们都是是把内核zImagge文件下载到0 x300008000地址上,把把根文件系统统img文件下载到0 x3088000000地址上。当我们用命令tt zImaage把内核zImagge下载到内存存地址0 x3000080000上之后,先先使用nand erasse keernel命令擦除掉flash的kernel分区上的数数据(否则在读出flash数据时会报报失败),然后可以以用nand writee 0 x3000080000 kerrnel 00 x2000000命令把内存存中的内核文文件烧写到flash

20、的对应kerneel分区中去,如如下图所示: 同理,当我们用用命令tftp 0 x3088000000 roootfs.ccramfss把根文件系系统rootffs.craamfs映像文件下下载到内存地地址0 x3088000000上之后,用nand writee 0 x3008000000 extt2 0 xx10000000命令把它烧烧写到flash的ext2分区中去,当当然,在烧写写之前也要先先使用 naand eerase ext22擦除掉flash的ext2分区,否则则烧写后读出出数据会失败败。如下图所所示:注意:如果发现现tftp服务配置是是正确的,但但是有些文件件不能够下载载,则

21、很有可可能是文件权权限的问题。可可以使用sudo cchmod 777 zzImagee roottfs.crramfs这样的命令令来更改文件件访问权限。现在,内核和ccramfss根文件系统统都烧写到flash上去了,只只要设置好正正确的内核启启动参数就可可以启动开发发板了。AKAE24440 # sset boootcmdd nandd readd 0 x3000080000 kerrnel 00 x2000000; mybooot 0 x3300080000AKAE24440 # sset bbootarrgs nnoinittrd cconsolle=ttyySAC0,1152000A

22、KAE24440 # sset bbootmoode nnandAKAE24440 # sset iinit /linuuxrc AKAE24440 # sset rroot /dev/mtdbllock2AKAE24440 # ssavebootcmdd参数表示u-booot上电后会自自动执行的命命令,第一条条nand read 0 x3000080000 kernnel 0 xx2000000表示从flash上kerneel分区去读取Linux内核到开发发板内存地址址0 x3000080000处,大小为0 x2000000字节;第二二条命令是mybooot 0 x3300080000表示跳

23、转到地址0 x3000080000去启动Linux内核。这两两条命令要用用分号“;”隔开,但是设设置bootccmd参数时设置置给它的是一一个字符串,所所以分号要用用转义字符“;”代替。bootarggs就是我们常常说的Linux内核的启动动命令行参数数(Linuxx_cmd_line)。U-booot通过这个参参数告知内核核一些关键的的启动参数。实际上,在Ubboot中,最后的的完整的启动动命令行参数数是由前面设设置那些一个个一个的小项项组合而成的的。真正完整整的命令行参参数是:noinitrrd coonsolee=ttySSAC0,11152000 iniit=/liinuxrcc cs

24、889x0_mmedia=rj45 root=/dev/mtdbllock2 mtdpaarts=aakae24440-naand:1MM(u-booot),22M(kerrnel),16M(eext2),45M(ttemp) ip=1992.1688.2.1000:191:192.1168.2.21:2555.2555.255.0:etth0:offf noinitrrd表示内核启启动时不需要要初始化一个个内存磁盘ramdiisk;而root=/dev/mtdbllock2表示根文件件系统在flash的编号为2的分区上(从从0开始编号的的,所以是第第三个分区,回回忆前面的

25、u-booot的分区信息息,flash上分区依次次是u-booot,kerneel,ext2,temp,我们的根根文件系统就就在第三个分分区ext2上);consoole=tttySAC00, 1155200表示打开一一个串行终端端ttySACC0,它是通过过串口1工作的,波波特率为1152000;init=/linuuxrc表示内核启启动好后第一一个执行的应应用程序是/linuuxrc,根目录下下的linuxxrc;mtdpaarts=aakae24440-naand:1MM(u-booot),22M(kerrnel),16M(eext2),45M(ttemp)表示u-booot传递给内核核

26、的分区信息息。我们在选择使用用nfs根文件系统统还是cramffs根文件系统统的时候,bootaargs、bootccmd和init参数基本都都一样,不用用改变,需要要改变的是bootmmode参数,由bootmmode参数的设置置决定去选择择root参数(描述cramffs根文件系统统所在位置)还是nfsrooot参数(描述nfs根文件系统统所在位置),即bootmode为nand时选择root参数,bootmode为nfs时选择nfsroot参数。在启动进入到LLinux系统后,可可以通过在命命令行终端键键入如下命令令来查看命令令行参数:$cat /proc/cmdliine现在启动。 A

27、KAE24440 # rreset这时屏幕上出现现很多内核启启动信息,之之后提示登录录,输入root即可登录。 (none) loginn: rooot现在可以试试各各种Linux基本命令。注注意cramffs是只读文件件系统,在开开发板上运行行时不能改动动里面的文件件。 有些时候我们可可能会尝试配配置不同的内内核选项,会会得到不同的的几个内核zImagge文件,这样样都烧写到flash上再reset启动太浪费费时间,可以以用tftp把内核zImagge加载到内存0 x3000080000地址上,不不烧写,直接接用mybooot 0 x3300080000去启动内存存上的内核。如如下图示:3.

28、2 将自己己定制的根文文件系统下载载到开发板运运行“根文件系统”是一种不严严格的说法,其其实是指文件件系统中的文文件和目录,这这些文件和目目录构成了一一个Linux系统运行所所需的基本框框架。ftp上的rootffs-bassic.taar是根文件系系统的打包,由由于包含设备备文件,需要要root权限才能解解包: $ sudoo tar xf roootfs-basicc.tar解包后可以根据据自己的需要要修改其中的的目录和文件件,然后将根根文件系统目目录制作成cramffs映像再下到到开发板运行行,这样就达达到了修改根根文件系统中中的目的。 首先确认你的主主机上安装了了软件包cramffsp

29、roggs,然后制作cramffs文件系统映映像: $ mkcrramfs /roootfs rrootfss.crammfs然后按照前面的的步骤把rootffs.craamfs下载到开发发板的ext2分区,运行行一下试试。 3.3 设置开开发板的启动动方式为NFS RRoot基本思想是:在在主机上开NFS服务器,把把主机上的/roootfs目录导出为NFS服务目录,使使开发板一启启动就自动加加载主机的/roootfs目录为根文文件系统,省省去了下载和和烧写映像的的麻烦,在主主机上修改根根文件系统中中的文件立刻刻在开发板的的系统上生效效,在开发过过程中十分便便利。 首先在主机上安安装和配置NF

30、S服务,确认认你的主机安安装了nfs-kkernell-servver软件包。然然后修改配置置文件/etc/exporrts,添加下面面一行(注意意*号后面紧跟跟左括号,无无空格,每个个逗号后面也也不能有空格格): /home/aakaeduu/roottfs *(rw,ssync,nno_rooot_squuash)这表示我们把上上一节中通过过解压rootfss-basiic.tarr得到的/homee/akaeedu/roootfs/目录设置为nfs服务目录。更改配置后需要要重启NFS服务: $ sudoo /etcc/initt.d/nffs-kerrnel-sserverr restt

31、art用rpcinffo -p命令看一下portmmapperr和nfs服务是否正正常启动了,用exportfs命令看一下导出目录的设置是否正确。 进入开发板的bbootlooader,修改内核核启动参数: AKAE24440 # sset boootcmdd nandd readd 0 x3000080000 kerrnel 00 x2000000; mybooot 0 x3300080000AKAE24440 # sset bbootarrgs nnoinittrd cconsolle=ttyySAC0,1152000AKAE24440 # sset iinit /linuuxrc AKA

32、E24440 # sset nnfsrooot /hhome/aakaeduu/roottfsAKAE24440 # sset bbootmoode nnfsAKAE24440 # ssaveAKAE24440 # rreset真正完整的内核核启动命令行行参数是:noinitrrd connsole=ttySAAC0,1115200 init=/linuuxrc rroot=/dev/nnfs nffsroott=1:/home/akaeddu/roootfs mmtdparrts=akkae24440-nannd:1M(u-booot),2MM(kernnel),11

33、6M(exxt2),445M(teemp) iip=19000:1:1192.1668.2.221:250:ethh0:offf 注意,如果某一一项参数很长长,而miniccom提供的终端端却不能自动动换行,一行行写不下的部部分只好盲打打了,注意不不要打错。如如果是图形界界面的consoole,可以把字字体调小使得得一行可以容容得下这么长长的参数,或或者在gedit写字板程序序中写好后直直接粘贴到consoole窗口(我们们推荐采用这这种方法,把把经常用到的的启动参数都都集中写好,以以后可以选择择对应的参数数直接粘贴就就好了,

34、非常常方便)。关关于NFS根文件系统统的内核启动动参数参考内内核源代码的的Docummentattion/nnfsrooot.txtt文档。 现在可以自己交交叉编译一些些小程序,然然后拷贝到主主机的/roootfs目录,我们们可以立刻在在开发板上运运行该程序,而而不需要重新新下载和烧写写了。 3.4 配置YYAFFS文件系统cramfs是是只读文件系系统,在Flash上压缩存储储,解压并加加载到RAM运行。由于于只读因而功功能上很受限限制,但可以以保护系统文文件不被意外外的写操作损损坏。实际产产品往往配置置两个Flash分区,一个个只读分区用用于存放系统统文件(程序序文件和库文文件),另一一个

35、可写分区区,采用JFFS或YAFFS文件系统,用用于存放应用用程序数据,为为了简便起见见,我们只分分一个区,使使用可写的YAFFS文件系统。注意,完成这个个实验之前先先要完成上一一节内容,能能启动到nfs根文件系统统。 首先用NFS方方式启动系统统。YAFFS文件系统和和我们熟悉的的ext2不同,不需需要格式化,只只需要全部擦擦除就可以用用了。用根文文件系统中的的flashh_erasseall命令擦除root分区并mount上来。以下下命令在开发发板上执行 # flashh_erasseall /dev/mtd2Erasingg 16 KKibytee 6bb8000 - 100 % coo

36、mplette.Skippinng badd blocck at 0 x0066bc0000Erasingg 16 KKibytee 3ddfc0000 - 999 % ccompleete.# mountt -t yyaffs /dev/mtdbllock2 /mntyaffs: dev iis 3255058599 namee is mtdbllock2yaffs: Attemmptingg MTD mountt on 331.3, mtdbblock22block 4432 iss bad# ls /mmntlost+fooundflash_eeraseaall命令是从mtd项目( )的

37、源代码码中交叉编译译得来的。 现在可以把根文文件系统中的的所有文件拷拷贝到Flash分区。以下下命令在开发发板上执行: # cp -aa bin etc llib liinuxrcc opt sbin srv ttmp ussr /mnnt/# mkdirr -p /mnt/pproc /mnt/ssys /mmnt/deev /mnnt/mntt /mntt/var/run# mknodd /mntt/dev/consoole -mm 600 c 5 11# mknodd /mntt/dev/null -m 6666 c 11 3# umounnt mntt# rebooot注意:像/prr

38、oc、/sys这样正mount着特殊文件件系统的目录录和/dev目录下的设设备文件一定定不可以用cp命令拷贝。/mnt目录显然也也不能拷贝。这这些目录和设设备文件需要要手动创建。 重启目标系统之之后进入U-booot,修改内核核启动参数使使之从ext2分区启动即即可(如果下下次还用NFS启动,这里里就不save了): AKAE24440 # sset bbootmoode nnandAKAE24440 # sset rroot /dev/mtdbllock2AKAE24440 # sset bbootarrgs nnoinittrd rrootfsstype=yaffss rw consool

39、e=tttySAC00,1152200AKAE24440 # ssaveAKAE24440 # rreset现在试试能不能能修改Flash根文件系统统中的文件。 4.编译内核将内核释放到/linuux-2.66.27目录下 $ tar xf liinux-22.6.277.tar.bz2进入内核目录: $ cd llinux-2.6.227(本开发板不用用修改makeffile,打补丁时时就会自动修修改)首先修修改Makeffile,找到 ARCH ?= $(SSUBARCCH)CROSS_CCOMPILLE ?=改为 ARCH ?= armmCROSS_CCOMPILLE ?= armm-l

40、inuux-注意ARCH ?=arrm后面不能有有空格,要确确保空格已删删除干净,并并且不要漏了了arm-llinux-末尾的“-”。下面对内内核打patchh(注意打patch不要重复打): /linuxx-2.6.27$ ppatch -p1 Pseuudo - /prroc ssupporrt; SSysctll suppport (/procc/sys); syssfs ssupporrt 和Virtuual meemory suppport (formeer shmm fs); Tmpffs POSSIX Acccess contrrol Liists。 /prroc m(或者叫pr

41、ocffs)是内核提提供给用户程程序的接口,很很多Linux程序都需要要在procffs中读写数据据,比如busybbox,因此这个个选项一般是是不能少的。Virtuual meemory m(或者叫tmpfs)用于内存存虚拟磁盘,后后面我们在做做根文件系统统时要mount一个tmpfs到/dev目录下。 3、不需要改变变Boot optioons - Defaault kkernell commmand sstringg,因为bootlloader中的内核启启动参数会取取代这里的设设置。 4、选中Devvice DDriverrs - Netwoork deevice suppoort -

42、Etheernet (10 oor 1000Mbit) - CCS89000A suppport,添加对网网卡芯片的支支持。在 - NNetworrk s菜单中选上NFS cclientt suppport;NFS cclientt suppport ffor NFFS verrsion33;NFS cclientt suppport ffor thhe NFSSv3 ACCL prootocoll exteensionn和Root on NNFS。 5、选中Devvice DDriverrs - Memorry Tecchnoloogy Deevicess (MTDD) - MTD ppar

43、tittioninng suppport,在Devicce Driivers - Meemory Technnologyy Deviices (MTD),选中NAND Devicce Suppport和它下面的NAND Flashh suppport ffor S33C24100/S3C22440 SSoC; SS3C24110 NANND driiver ddebug,不要选择S3C24410 NAAND Haardwarre ECCC,因为S3C24410硬件生成ECC码的算法和和我们所需要要的不一致。 6、在 - Misceellaneeous ss中选中YAFFSS2 suupport

44、t; Autto sellect yyaffs22 formmat; cachee shorrt nammes inn RAM, 再选上Comprressedd ROM suppport (cramffs)。 7、在Deviice Drriverss - GGraphiics suupportt中选中Suppoort foor fraame buuffer devicces, 再选中它下下面的Enablle firrmwaree EDIDD; Enaable vvideo Mode Handlling HHelperrs; S33C24100 LCD frameebuffeer supppor

45、t,不选择Virtuual Frrame BBufferr suppport因为它是一一个用于调试试的虚拟设备备驱动而不是是实际硬件的的驱动。如果果还选中了Bootuup Loggo,那么在内核核启动过程中中初始化frameebuffeer时会在屏幕幕上看到Linux的企鹅logo,这是测试frameebuffeer驱动是否正常常工作最直接接的方法。Bootuup Loggo有三种规格格,我们的开开发板支持VGA输出,可以以选择224色的漂亮logo。 8、在 Devvice DDriverrs - USB ssupporrt中选中Suppoort foor Hosst-sidde USBB,

46、然后选择OHCI HCD ssupporrt,在Devicce Driivers - Innput ddevicee suppport中选中Mousee inteerface,设置屏幕幕分辨率Horizzontall screeen reesoluttion和Vertiical sscreenn resoolutioon为1024和768。 9、选中Devvice DDriverrs -RReal ttime cclock - Seet sysstem ttime ffrom RRTC onn starrtup aand reesume; /syss/classs/rtcc/rtcNN (sy

47、ssfs); /procc/drivver/rttc (prrocfs for rrtc0); /devv/rtcNN (chaaracteer devvices); Tesst driiver/ddevicee.10、如果不希希望在/dev目录下生成成大量伪终端端设备文件,可可以取消选择Devicce Driivers - Chharactter deevicess - LLegacyy (BSDD) PTYY suppport。 配置完成后用mmake命令编译内内核,这个过过程需要较长长时间,编译译好的内核位位于/linnux-2.6.27/arch/arm/bboot/zzImagee。

48、现在将自自己编译的内内核下载到开开发板,看系系统能不能正正常启动。 5.制作根文件件系统5.1 根文件件系统框架和和busyboox首先用mkdiir手动创建如如下的基本目目录结构: $ treee roottfs/rootfs/|- binn|- devv|- etcc| |- initt.d| - netwwork| |- if-doown.d| |- if-poost-doown.d| |- if-prre-up.d| - if-upp.d|- libb|- mntt|- optt|- prooc|- sbiin|- srvv|- syss|- tmpp|- usrr| |- bin|

49、|- lib| - sbinn- varr - run/bin /ssbin /usr/bbin /uusr/sbbin系统的基本命令令,系统关键键组件的可执执行文件位于于/bin和/sbin,其它应用用程序的可执执行文件位于于/usr/bin和/usr/sbin,bin和sbin的区别在于于,bin目录下的可可执行文件用用于日常操作作,例如ls、cp,sbin目录下的可可执行文件用用于管理操作作,例如ifconnfig,执行管理理操作通常需需要root权限 /lib /uusr/liib共享库,也是分分为系统关键键组件的共享享库和其它应应用程序的共共享库 /procproc文件系系统的挂载点

50、点 /syssys文件系统统的挂载点 /dev设备文件 /etc配置文件、启动动脚本 /var运行时产生的记记录文件、锁锁文件、日志志文件 /tmp运行时产生的临临时文件 /mnt一般用作挂载点点 /opt一般存放第三方方软件 /srv一般用作Webb服务、ftp服务的服务务目录 接下来安装buusyboxx到根文件系系统中。busybbox是专为嵌入式Linux设计的,它它把大多数常常用命令(如如ls、cp、tar等等)的常常用选项剪裁裁出来拼在一一起。在根文文件系统中只只有一个可执执行文件就是是/bin/busybbox,而其它的的命令都创建建为/bin/busybbox的链接文件件,bu

51、sybbox 通过命令行行第0个参数(也也就是命令名名)判断应该该执行哪个命命令。这样使使得嵌入式Linux系统有完整整的命令集却却占用很小的的存储空间。 首先从官方网站站 .busybbox.neet/ 下载源码包busybbox-1.9.1.ttar.bzz2并解包到主主目录下。 $ tar xf buusyboxx-1.9.1.tarr.bz2; cd bbusyboox-1.99.1/busyboxx的配置系统统和内核源代代码很相似,因因此配置方法法也和内核相相似,首先修修改Makeffile,找到 ARCH ?= $(SSUBARCCH)CROSS_CCOMPILLE ?=改为 AR

52、CH ?= armmCROSS_CCOMPILLE ?= armm-linuux-然后我们以一个个缺省配置为为起点来做进进一步的配置置: /busybbox-1.9.1$ make defcoonfig/busybbox-1.9.1$ make menucconfigg在菜单中做如下下配置: 选择BusyBBox Seettinggs - Instaallatiion Opptionss - BBusyBoox insstallaation prefiix,设置为/homee/akaeedu/roootfs,编译后将将安装到这个个目录下。 根据需要裁剪各各命令。但是是Shellls - Cho

53、osse youur deffault shelll选项一定要要保留一个默默认shell(例如ash),如果没没有默认shell,将不会创创建/bin/sh这个链接,而而一般的shell脚本都是以#!/biin/sh开头的,如如果找不到/bin/sh就不能执行行。 然后编译和安装装busyboox: /busybbox-1.9.1$ make/busybbox-1.9.1$ make instaallbusyboxx文件和一系系列的链接文文件将安装到到/homee/akaeedu/roootfs下。busybbox文件位于根根文件系统的的/bin目录,其它它链接文件位位于/bin、/sbin、

54、/usr/bin、/usr/sbin目录,有一一个链接文件件linuxxrc位于根文件件系统的根目目录/,它是系统的的启动程序,bootlloaderr中内核的启启动参数有init=/linuuxrc,也就是说说内核启动后后首先执行/linuuxrc(也是busybbox的一个符号号链接)。linuxxrc负责完成系系统的初始化化工作: 设置信号处理程程序 初始化conssole 解析/etc/initttab文件 执行系统初始化化脚本,缺省省的是/etc/init.d/rcSS 执行initttab中类型为wait的程序 执行initttab中类型为once的程序 上述步骤完成后后系统启动完

55、完成,此后init程序将循环环执行以下步步骤: 执行initttab中类型为respaawn的程序,如如果所执行的的程序终止,则则再次执行它它 如果收到用户请请求,则执行行initttab中类型为askfiirst的程序 linuxrcc需要读取设设备文件/dev/consoole和/dev/null,我们手动动创建这些设设备文件: $ cd rrootfss/dev; sudoo mknood -m 600 cconsolle c 55 1; ssudo mmknod -m 6666 nulll c 11 3注意,创建设备备文件需要root权限,常见见设备文件的的设备号可以以从内核代码码的D

56、ocummentattion/ddevicees.txtt文件中查到到。 然后创建一个启启动配置文件件/roootfs/eetc/innittabb: :sysinnit:/eetc/innit.d/rcS:respaawn:/ssbin/ggetty 1152000 s3cc2410_seriaal0:restaart:/ssbin/iinit:shutddown:/bin/uumountt -a -r启动的过程中首首先执行rcS启动脚本,我我们创建这个个脚本/roootfs/eetc/innit.d/rcS: #!/bin/shmount -a注意这个脚本需需要加可执行行权限:chmodd

57、 +x rrcS。这个脚本本做了一件事事情,根据/etc/fstabb配置文件提提供的信息mount一些文件系统统,我们创建建这个配置文文件/roootfs/eetc/fsstab: # proc /proc procc deffaultss 0 0sys /ssys ssysfs defaaults 0 00/proc和/sys都是pseuddo文件系统,它它们并不在磁磁盘或flash上存储任何何数据,虽然然看起来/proc和/sys目录下有很很多文件,但但这些文件都都是内核导出出的接口,对对这些文件进进行读写会读读写到内核中中的一些运行行时参数,而而不会读写到到磁盘。/proc文件系统是b

58、usybbox中的许多程程序所需要的的接口,/sys文件系统则则是后面要讲讲的mdev所需要的接接口。 mount完文文件系统后,rcS执行结束。下下面将执行initttab文件中类型型为respaawn的命令,也也就是 /sbin/ggetty 1152000 s3cc2410_seriaal0我们的PC在启启动时执行getty打开几个虚虚终端,例如如/dev/ttty1/dev/tty6,嵌入式开开发板也是用用getty打开虚终端端,这个虚终终端对应的是是串口,因此此需要访问串串口的设备文文件/dev/s3c24410_seerial00,以上命令令还指定了波波特率为1152000。现在我

59、们们创建这个设设备文件: $ cd rrootfss/dev; sudoo mknood -m 600 ss3c24110_serrial0 c 2044 64这个设备号在内内核代码的Docummentattion/aarm/Saamsungg-S3C224XX/OOverviiew.txxt中可以查到到,在内核代代码中,S3C24410的第一个串串口表示为ttySAAC0,但是后面面介绍的mdev程序将使用s3c24410_seerial00这个名字,因因此这里把文文件名指定为s3c24410_seerial00。 系统启动打开虚虚终端后会提提示输入用户户名和密码然然后才启动shell,我们

60、需要要创建帐号文文件passwwd和group。/roootfs/eetc/paasswd文件内容为为: root:00:0:rooot:/:/bin/sh/rootffs/etcc/grouup文件内容为为: root:00:这样就创建了一一个root帐号,没有有密码。如果果需要密码,可可以把主机上上的/etc/shadoow文件中root帐号的那一一行放到开发发板的根文件件系统中。 5.2 gliibc由于busybbox需要glibc共享库的支支持,下面的的步骤将在根根文件系统中中安装glibc。在此之前前首先解释一一下应用程序序如何找到所所需的共享库库。通过ld命令的参数-rpatth

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论