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

下载本文档

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

文档简介

构建嵌入式Linux系统1.取本实验相关的软件包到ftp下载以下软件包:备注制作交叉编译工具链所需的源码包文件名binutils-2.16.1.tar.bz2gcc-4.0.2.tar.bz2glibc_2.3.6.tar.bz2glibc-linuxthreads-2.3.6.tar.bz2linux-.tar.bz21inux-1ibc-headers-.tar.bz2备注制作交叉编译工具链所需的源码包这时屏幕上出现很多内核启动信息,之后提示登录,输入root即可登录。(none)login:root现在可以试试各种Linux基本命令。注意cramfs是只读文件系统,在开发板上运行时不能改动里面的文件。有些时候我们可能会尝试配置不同的内核选项,会得到不同的几个内核zlmage文件,这样都烧写到flash上再reset启动太浪费时间,可以用tftp把内核zImage加载到内存0x30008000地址上,不烧写,直接用myboot0x30008000去启动内存上的内核。如下图示:AKAE2440#AKAE2440#tftp0x30008000myzlmageFilename•myzlmage1.箱adaddress:0x30008000Loading:##################################################################################################################################################################################################################################################################################################doneBytestransferred=1483828(16a434hex)AKAE2440#myboot0x3OOO8OOO|CTRL-AZforhelp|1152008N1|NOR|Minicom2.3-rc|VT102|Offline将自己定制的根文件系统下载到开发板运行“根文件系统”是一种不严格的说法,其实是指文件系统中的文件和目录,这些文件和目录构成了一个Linux系统运行所需的基本框架。ftp上的rootfs-basic.tar是根文件系统的打包,由于包含设备文件,需要root权限才能解包:~$sudotarxfrootfs-basic.tar解包后可以根据自己的需要修改其中的目录和文件,然后将根文件系统目录制作成cramfs映像再下到开发板运行,这样就达到了修改根文件系统中的目的。首先确认你的主机上安装了软件包cramfsprogs,然后制作cramfs文件系统映像:~$mkcramfs〜/rootfsrootfs.cramfs然后按照前面的步骤把rootfs.cramfs下载到开发板的ext2分区,运行一下试试。设置开发板的启动方式为NFSRoot基本思想是:在主机上开NFS服务器,把主机上的〜/rootfs目录导出为NFS服务目录,使开发板一启动就自动加载主机的〜/rootfs目录为根文件系统,省去了下载和烧写映像的麻烦,在主机上修改根文件系统中的文件立刻在开发板的系统上生效,在开发过程中十分便利。首先在主机上安装和配置NFS服务,确认你的主机安装了nfs-kernel-server软件包。然后修改配置文件/etc/exports,添加下面一行(注意*号后面紧跟左括号,无空格,每个逗号后面也不能有空格):/home/akaedu/rootfs*(rw,sync,no_root_squash)这表示我们把上一节中通过解压rootfs-basic.tar得到的/home/akaedu/rootfs/目录设置为nfs服务目录。更改配置后需要重启NFS服务:~$sudo/etc/init.d/nfs-kernel-serverrestart用rpcinfo-p命令看一下portmapper和nfs服务是否正常启动了,用exportfs命令看一下导出目录的设置是否正确。进入开发板的bootloader,修改内核启动参数:AKAE2440#setbootcmdnandread0x30008000kernel0x200000\;myboot0x30008000AKAE2440#setbootargsnoinitrdconsole=ttySACO,115200AKAE2440#setinit/linuxrcAKAE2440#setnfsroot/home/akaedu/rootfsAKAE2440#setbootmodenfsAKAE2440#saveAKAE2440#reset真正完整的内核启动命令行参数是:noinitrdconsole=ttySAC0,115200init=/linuxrcroot=/dev/nfsnfsroot=1:/home/akaedu/rootfsmtdparts=akae2440-nand:IM(u-boot),2M(kernel),16M(ext2),45M(temp)ip=00:192,168.2.21:1:255,255.255.0::ethO:off注意,如果某一项参数很长,而miniconi提供的终端却不能自动换行,一行写不下的部分只好盲打了,注意不要打错。如果是图形界面的console,可以把字体调小使得一行可以容得下这么长的参数,或者在gedit写字板程序中写好后直接粘贴到console窗口(我们推荐采用这种方法,把经常用到的启动参数都集中写好,以后可以选择对应的参数直接粘贴就好了,非常方便)。关于NFS根文件系统的内核启动参数参考内核源代码的Documentation/nfsroot.txt文档。现在可以自己交叉编译一些小程序,然后拷贝到主机的〜/rootfs目录,我们可以立刻在开发板上运行该程序,而不需要重新下载和烧写了。3.4配,3.4配,[YAFFS文件系统cramfs是只读文件系统,在Flash上压缩存储,解压并加载到RAM运行。由于只读因而功能上很受限制,但可以保护系统文件不被意外的写操作损坏。实际产品往往配置两个Flash分区,一个只读分区用于存放系统文件(程序文件和库文件),另一个可写分区,采用JFFS或YAFFS文件系统,用于存放应用程序数据,为了简便起见,我们只分一个区,使用可写的YAFFS文件系统。注意,完成这个实验之前先要完成上一节内容,能启动到nfs根文件系统。首先用NFS方式启动系统。YAFFS文件系统和我们熟悉的ext2不同,不需要格式化,只需要全部擦除就可以用了。用根文件系统中的flash.eraseall命令擦除root分区并mount上来。以下命令在开发板上执行flash_eraseall/dev/mtd2Erasing16Kibyte@6b8000—10%complete.Skippingbadblockat0x006bc000Erasing16Kibyte@3dfc000—99%complete.mount-tyaffs/dev/mtdblock2/mntyaffs:devis32505859nameisnmtdblock2Hyaffs:AttemptingMTDmounton31.3,nmtdblock2Hblock432isbadIs/mntlost+foundflash_eraseall命令是从mtd项目()的源代码中交叉编译得来的。现在可以把根文件系统中的所有文件拷贝到Flash分区。以下命令在开发板上执行:cp-abinetcliblinuxrcoptsbinsrvtmpusr/mnt/mkdir-p/mnt/proc/mnt/sys/mnt/dev/mnt/mnt/mnt/var/runmknod/mnt/dev/console-m600c51mknod/mnt/dev/null-m666c13umountmntreboot注意:像/proc、/sys这样正mount着特殊文件系统的目录和/dev目录下的设备文件一定不可以用cp命令拷贝。/nrnt目录显然也不能拷贝。这些目录和设备文件需要手动创建。重启目标系统之后进入U-boot,修改内核启动参数使之从ext2分区启动即可(如果下次还用NFS启动,这里就不save了):AKAE2440#setbootmodenandAKAE2440#setroot/dev/mtdblock2AKAE2440#setbootargsnoinitrdrootfstype=yaffsrwconsole=ttySACO,l15200AKAE2440#saveAKAE2440#reset现在试试能不能修改Flash根文件系统中的文件。4.编译内核将内核释放到〜/linux-2.6.27目录下~$进入内核目录:~$cdlinux-2.6.27(本开发板不用修改makefile,打补丁时就会自动修改)首先修改Makefile,找到ARCH?=$(SUBARCH)CROSS_COMPILE?=改为ARCH?=armCROSS_COMPILE?=arm-linux-注意ARCH?=arm后面不能有空格,要确保空格已删除干净,并且不要漏了armTinux-末尾的。下面对内核打patch(注意打patch不要重复打):-/linux-2.6.27$patch-pl<然后以内核源代码自带的smdk2440基本配置文件为基础,使用menuconfig定制内核(确认你的主机安装了libncurses-dev软件包)。-/linux-2.6.27$cparch/arm/configs/akae2440_defconfig.config〜/linux-2.6.27$makemenuconfig查看配置菜单中的如下选项(有些已经默认选中):1、在Floatingpointemulation中选择NWFPEmathemulation。由于ARM920T没有浮点协处理器,浮点数指令需要用其它指令仿真实现。有两种方法可以仿真浮点指令:一种方法如先前所说的,使交叉编译器支持soft-float,也就是一遇到C代码里的浮点运算就自动生成仿真指令,另一种方法是交叉编译器仍然生成浮点运算指令(对于ARM平台是指协处理器指令),然而ARM920T没有浮点协处理器,无法识别浮点指令,因而产生undefined异常,这个Floatingpointemulation内核选项就是在undefined异常的处理函数中仿真实现浮点运算。也就是说,这里我们使用非soft-float的交叉编译器并在内核中实现浮点仿真。这样的运行效率比使用soft-float编译要低,因为每次浮点运算都需要处理异常和进入内核,但是兼容性好,便于我们利用别人已编译好的程序。2、选中->Pseudo->/procsupport;Sysctlsupport(/proc/sys);sysfssupport和Virtualmemorysupport(formershmfs);TmpfsPOSIXAccesscontrolListSo/procm(或者叫procfs)是内核提供给用户程序的接口,很多Linux程序都需要在proofs中读写数据,比如busybox,因此这个选项一般是不能少的。Virtualmemorym(或者叫tmpfs)用于内存虚拟磁盘,后面我们在做根文件系统时要mount一个tmpfs到/dev目录下。3、不需要改变Bootoptions->Defaultkernelcommandstring,因为bootloader中的内核启动参数会取代这里的设置。4、选中DeviceDrivers->Networkdevicesupport->Ethernet(10or100Mbit)->CS8900Asupport,添加对网卡芯片的支持。在~>Networks菜单中选上NFSclientsupport;NFSclientsupportforNFSversions;NFSclientsupportfortheNFSv3ACLprotocolextension和RootonNFS。5、选中DeviceDrivers->MemoryTechnologyDevices(MTD)->MTDpartitioningsupport,在DeviceDrivers->MemoryTechnologyDevices(MTD),选中NANDDeviceSupport和它下面的NANDFlashsupportforS3C2410/S3C2440SoC;S3C2410NANDdriverdebug,不要选择S3c2410NANDHardwareECC,因为S3c2410硬件生成ECC码的算法和我们所需要的不一致。6、在->Miscellaneouss中选中YAFFS2support;Autoselectyaffs2format;cacheshortnamesinRAM,再选上CompressedROMsupport(cramfs)o7、在DeviceDrivers->Graphicssupport中选中Supportforframebufferdevices,再选中它下面的EnablefirmwareEDID;EnablevideoModeHandlingHelpers;S3C2410LCDframebuffersupport,不选择VirtualFrameBuffersupport因为它是一个用于调试的虚拟设备驱动而不是实际硬件的驱动。如果还选中了BootupLogo,那么在内核启动过程中初始化framebuffer时会在屏幕上看到Linux的企鹅logo,这是测试framebuffer驱动是否正常工作最直接的方法。BootupLogo有三种规格,我们的开发板支持VGA输出,可以选择224色的漂亮logo。8、在DeviceDrivers->USBsupport中选中SupportforHost-sideUSB,然后选择OHCIHCDsupport,在DeviceDrivers->Inputdevicesupport中选中Mouseinterface,设置屏幕分辨率HorizontalscreenresolutionVerticalscreenresolution为1024和768o9、选中DeviceDrivers->Realtimeclock->SetsystemtimefromRTConstartupandresume;/sys/class/rtc/rtcN(sysfs);/proc/driver/rtc(procfsforrtcO);/dev/rtcN(characterdevices);Testdriver/device.10、如果不希望在/dev目录下生成大量伪终端设备文件,可以取消选择DeviceDrivers->Characterdevices->Legacy(BSD)PTYsupporto配置完成后用make命令编译内核,这个过程需要较长时间,编译好的内核位于Vlinux-2.6.27/arch/arm/boot/zImageo现在将自己编译的内核下载到开发板,看系统能不能正常启动。5.制作根文件系统1根文件系统框架和busybox首先用mkdir手动创建如下的基本目录结构:飞treerootfs/rootfs/|一bin|一dev|一etc||--init.d一一networkj--if-down.dif-post-down.d一if-pre-up.d|、一if-up.d|--lib|一mnt|一opt|一proc|一sbin|一srv|一sys|一tmp|一usr||一bin||--lib——sbin一var一run/bin/sbin/usr/bin/usr/sbin系统的基本命令,系统关键组件的可执行文件位于/bin和/sbin,其它应用程序的可执行文件位于/usr/bin和/usr/sbin,bin和sbin的区别在于,bin目录下的可执行文件用于日常操作,例如Is、cp,sbin目录下的可执行文件用于管理操作,例如ifconfig,执行管理操作通常需要root权限/lib/usr/lib共享库,也是分为系统关键组件的共享库和其它应用程序的共享库/procproc文件系统的挂载点/syssys文件系统的挂载点/dev设备文件/etc配置文件、启动脚本/var运行时产生的记录文件、锁文件、日志文件/tmp运行时产生的临时文件/mnt一般用作挂载点/opt一般存放第二方软件/srv一般用作Web服务、ftp服务的服务目录接下来安装busybox到根文件系统中。busybox是专为嵌入式Linux设计的,它把大多数常用命令(如Is、cp、tar等等)的常用选项剪裁出来拼在一起。在根文件系统中只有一个可执行文件就是/bin/busybox,而其它的命令都创建为/bin/busybox的链接文件,busybox通过命令行第0个参数(也就是命令名)判断应该执行哪个命令。这样使得嵌入式Linux系统有完整的命令集却占用很小的存储空间。首先从官方网站./下载源码包busyboxT.9.1.tar.bz2并解包到主目录下。~$tarxfbusybox-1.9.1busybox的配置系统和内核源代码很相似,因此配置方法也和内核相似,首先修改Makefile,找到ARCH?=$(SUBARCH)CROSS_COMPILE?=改为ARCH?=armCROSS.COMPILE?=arm-linux-然后我们以一个缺省配置为起点来做进一步的配置:-/busybox-1.9.1$makedefconfig-/busybox-1.9.1$makemenuconfig在菜单中做如下配置:选择BusyBoxSettings->InstallationOptions->BusyBoxinstallationprefix,设置为/home/akaedu/rootfs,编译后将安装到这个目录下。根据需要裁剪各命令。但是Shells->Chooseyourdefaultshell选项一定要保留一个默认shell(例如ash),如果没有默认shell,将不会创建/bin/sh这个链接,而一般的shell脚本都是以#!/bin/sh开头的,如果找不到/bin/sh就不能执行。然后编译和安装busybox:〜/busybox-1・9.1$make-/busybox-1.9.1$makeinstallbusybox文件和一系列的链接文件将安装到/home/akaedu/rootfs下。busybox文件位于根文件系统的/bin目录,其它链接文件位于/bin、/sbin>/usr/bin、/usr/sbin目录,有一个链接文件linuxrc位于根文件系统的根目录/,它是系统的启动程序,bootloader中内核的启动参数有init=/linuxrc,也就是说内核启动后首先执行/linuxrc(也是busybox的一个符号链接)。linuxrc负责完成系统的初始化工作:0.设置信号处理程序.初始化console.解析/etc/inittab文件.执行系统初始化脚本,缺省的是/etc/init.d/rcS.执行inittab中类型为wait的程序.执行inittab中类型为once的程序上述步骤完成后系统启动完成,此后init程序将循环执行以下步骤:0.执行inittab中类型为respawn的程序,如果所执行的程序终止,则再次执行它.如果收到用户请求,则执行inittab中类型为askfirst的程序linuxrc需要读取设备文件/dev/console和/dev/null,我们手动创建这些设备文件:~$cdrootfs/dev;sudomknod-m600consolec51;sudomknod-m666nullc13注意,创建设备文件需要root权限,常见设备文件的设备号可以从内核代码的Documentation/devices.txt文件中查到。然后创建一个启动配置文件~/rootfs/etc/inittab:::sysinit:/etc/init.d/rcS::respawn:/sbin/getty115200s3c2410_serial0::restart:/sbin/init::shutdown:/bin/umount-a-r启动的过程中首先执行rcS启动脚本,我们创建这个脚本〜/rootfs/etc/init.d/rcS:#!/bin/shmount-a注意这个脚本需要加可执行权限:chmod+xrcSo这个脚本做了一件事情,根据/etc/fstab配置文件提供的信息mount一些文件系统,我们创建这个配置文件〜/rootfs/etc/fstab:#<><mountpoint><type><options><dump><pass>proc/procprocdefaults00sys/syssysfsdefaults00/proc和/sys都是pseudo文件系统,它们并不在磁盘或flash上存储任何数据,虽然看起来/proc和/sys目录下有很多文件,但这些文件都是内核导出的接口,对这些文件进行读写会读写到内核中的一些运行时参数,而不会读写到磁盘。/proc文件系统是busybox中的许多程序所需要的接口,/sys文件系统则是后面要讲的mdev所需要的接口。mount完文件系统后,rcS执行结束。下面将执行inittab文件中类型为respawn的命令,也就是/sbin/getty115200s3c2410_serial0我们的PC在启动时执行getty打开几个虚终端,例如/dev/ttyl〜/dev/tty6,嵌入式开发板也是用getty打开虚终端,这个虚终端对应的是串口,因此需要访问串口的设备文件/dev/s3c2410_serial0,以上命令还指定了波特率为115200。现在我们创建这个设备文件:~$cdrootfs/dev;sudomknod-m600s3c2410_serial0c20464这个设备号在内核代码的Documentation/arm/Samsung-S3C24XX/0verview.txt中可以查到,在内核代码中,S3c2410的第一个串口表示为ttySACO,但是后面介绍的mdev程序将使用s3c2410_serial0这个名字,因此这里把文件名指定为s3c2410一serial。。系统启动打开虚终端后会提示输入用户名和密码然后才启动shell,我们需要创建帐号文件passwd和groupo〜/rootfs/etc/passwd文件内容为:root::0:0:root:/:/bin/sh^/rootfs/etc/group文件内容为:root::0:这样就创建了一个root帐号,没有密码。如果需要密码,可以把主机上的/etc/shadow文件中root帐号的那一行放到开发板的根文件系统中。2glibc由于busybox需要glibc共享库的支持,下面的步骤将在根文件系统中安装glibco在此之前首先解释一下应用程序如何找到所需的共享库。通过Id命令的参数-rpath可以在链接时将共享库的路径记在应用程序中,但是通常不推荐这样做,通常应用程序中只记录共享库的文件名(稍后提到的soname),启动程序时由动态链接器/lib/ldTinux.so根据以下规则查找共享库(摘自ld・so(8)):0.首先在环境变量LD_LIBRARY_PATH所记录的路径中查找.然后从缓存文件中查找。将共享库的路径写进然后执行Idconfig命令就可以生成缓存文件.如果上述步骤都找不到,则到默认的系统路径中查找,先是/usr/lib然后是/lib注意,LD_LIBRARY_PATH是不推荐使用的,尽量不要把它设定为环境变量,详细解释参见WhyLD_LIBRARY_PATHisbad(/"barr/ldpath.html)。每个共享库有三个文件名:realname>soname、linkername。realname是库文件的名字,包含完整的共享库版本号;soname是库文件的一个符号链接的名字,只包含主版本号,主版本号一致即可保证库函数的接口一致,因此应用程序只需确认soname与所需的共享库一致;linkername仅由链接器使用,有的是库文件的一个符号链接的名字,有的是一段链接脚本的名字。库文件的文件头记录了soname,因此Idconfig命令可以读取文件头生成相应的符号链接文件。综上,Idconfig命令读取Id.so.conf后做两件事,一是创建适当的soname链接,二是生成Id.so.cache,包含共享库的软件包在安装过程中都会执行一下Idconfig命令。下面以libc为例说明共享库的三个文件名:-rw-r-r-1akaeduakaedu1952008-03-1611:10libc.so$catlibc.so/*GNUIdscriptUsethesharedlibrary,butsomefunctionsareonlyinthestaticlibrary,sotrythatsecondarily.*/0UTPUT_F0RMAT(elf32-littlearm)GROUP(libc.so.6libc_nonshared.a)在我们先前制作交叉编译工具链时已经交叉编译了glibc,位于/opt/crosstool/gcc-4.0.2-glibc-2.3.6/arm-1inux/arm-1inux/1ib目录下,我们把这些共享库拷到根文件系统〜/rootfs/lib目录下:~$cd/opt/crosstool/gcc-4.0.2-glibc-2.3.6/arm-linux/arm-linux/lib;cp-dp*/home/akaedu/rootfs/lib/然后到〜/rootfs/lib目录下删掉所有静态库和一些不常用的库,剩下这些库文件:Vrootfs/lib$Isld-2.3.6.sold-linux.so.2libanl-2.3.6.solibanl.solibanl.so.11ibBrokenLocale-2.3.6.solibBrokenLocale.solibBrokenLocale.so.1libc-2.3.6.solibcrypt-2.3.6.solibcrypt.solibcrypt.so.1libc.solibc.so.6libdl-2.3.6.solibdl.solibdl.so.2libgcc_s.solibm.so.6libnsl-2.3.6.solibnsl.solibnsl.so.11ibnss_compat-2.3.6.solibnsscompat.solibnss_compat.so.2libnss_dns-2.3.6.solibnss_dns.solibnssdns.so.2libpcprolibpthread-0.10.solibpthread.solibpthread.so.0libresolv-2.3.6.solibresolv.solibresolv.so.2librt-2.3.6.solibrt.solibrt.so.1libnsslibSegFault.solibnssVrootfs/lib$Isld-2.3.6.sold-linux.so.2libanl-2.3.6.solibanl.solibanl.so.11ibBrokenLocale-2.3.6.solibBrokenLocale.solibBrokenLocale.so.1libc-2.3.6.solibcrypt-2.3.6.solibcrypt.solibcrypt.so.1libc.solibc.so.6libdl-2.3.6.solibdl.solibdl.so.2libgcc_s.solibm.so.6libnsl-2.3.6.solibnsl.solibnsl.so.11ibnss_compat-2.3.6.solibnsscompat.solibnss_compat.so.2libnss_dns-2.3.6.solibnss_dns.solibnssdns.so.2libpcprolibpthread-0.10.solibpthread.solibpthread.so.0libresolv-2.3.6.solibresolv.solibresolv.so.2librt-2.3.6.solibrt.solibrt.so.1libnsslibSegFault.solibnsslibstdc++.solibnss_libstdc++.so.6libnss_hesiod-2.3.6.solibnsshesiod.solibnsshesiod.so.2libnss_nis-2.3.6.solibnss_nisp]us-2.3.6.solibstdc++・so.6.0.6libthreaddb-l.0.solibthreaddb.solibthreaddb.so.1libutil-2.3.6.so制作交叉编译工具链的脚本和补丁crosstool.tar.bz2已制作好的交叉编译工具链,需要解包到/opt目录使用内核2627针对2440开发板制作的内核patchzlmage已编译好的内核,可直接下载到开发板rootfs-basic.tar基本根文件系统打包,由于有设备文件,所以解包需要root权限rootfs-basic.cramfs采用cramfs文件系统格式的基本根文件系统映像,可直接下载到开发板busybox-1.9.1,tar.bz2busybox源码包,嵌入式根文件系统基本命令集sqlite源码包,嵌入式数据库libcgi源码包,用于编写CGI程序的C函数库QtopiaCore源码包,Qt的嵌入式版本2.交叉编译工具链要做嵌入式Linux开发,首先需要有交叉编译工具链(crosscompilingtoolchain),也就是在主机(x86PC)上可编译生成目标板可执行文件(ARM指令)的编译工具。和普通的编译工具链一样,交叉编译工具链也包括编译、链接、修改目标文件的各种程序,如gcc>glibc>Id、gas、objdump、readelf等等。交叉编译工具链本身也是需要编译生成的,要得到一套完整的交叉编译工具链需要编译以下源码包:binutilsgccglibclinux(内核)linux-libc-headersglibc-linuxthreads这些源码包具有非常强的版本依赖关系,如果源码包的版本不匹配,在编译过程中会出现各种各样的问题,有些问题需要对源码做些修改或者打补丁,有些问题则是没有解决libgcc_s.so.1libm-2.3.6.solibmemusage.solibm.solibgcc_s.so.1libm-2.3.6.solibmemusage.solibm.solibgcc_s.so.1libm-2.3.6.solibmemusage.solibm.solibnss_nisplus.solibutil.solibnss_nisplus.so.2libutil.so.1libgcc_s.so.1libm-2.3.6.solibmemusage.solibm.solibnss_nis.solibnss_nis.so.2Idconfig是很常用的一个命令,如果某些程序把共享库安装到非标准目录(/lib和/usr/lib),则需要执行Idconfig更新缓存文件/etc/ld.so.cache,比如后面安装QtopiaCore时就会用到。但是busybox不包含Idconfig命令,因为它和glibc密切相关,是随glibc一起发布的,先前我们制作交叉编译工具链时己经生成了Idconfig,现在把它拷到根文件系统:~$现在通过NFS启动开发板,应该可以成功启动到shell了。3mdev先前我们在根文件系统的/dev目录下手动创建了三个设备文件:console、null和s3c2410_serial0,内核里还有很多设备驱动需要通过设备文件提供接口给应用程序访问,如果一个一个手动创建太麻烦而且容易出错,busybox提供的mdev程序可以从sysfs中读出内核提供的设备驱动信息,在/dev目录下自动创建相应的设备文件并为这些设备文件命名。在PC上完成这一功能的是udev,mdev是busybox为嵌入式系统裁剪过的udev。把以下几行附加到启动脚本~/rootfs/etc/init.d/rcS的末尾:mount-ttmpfsmdev/devmdev-smkdir/dev/inputIn-s/dev/mice/dev/input/micemdev还需要一个配置文件mdev.conf,用于指定各设备文件的所有者和权限,其格式可参考busybox源代码中的docs/mdev.txt。我们不做特别的设置,但这个文件是需要存在的,因此创建一个空文件:~$touchrootfs/etc/mdev.conf现在重新启动开发板,从minicorn可以看到开发板的/dev目录下创建了很多设备文件,而从主机上查看NFS目录〜/rootfs/dev却仍然只有先前的三个设备文件,想一想这是为什么。5.4系统时钟首先将主机上的时区文件拷到开发板根文件系统:~$cp/etc/localtime-/rootfs/etc/然后在启动脚本~/=00土£5/61;”门五.d/rcS中添加一条命令:hwclock—hctosys选项--hctosys的意思是读取硬件RTC时钟(he)成为当前的系统时钟(sys)。在系统运行期间,调用time(2)等函数读取的都是内核维护的系统时钟,而不会直接去读硬件时钟,所以,如果用date命令修改了系统时钟:#date031915232007MonMar1915:23:00CST2007这时关闭系统,时钟信息还是会丢失。如果在上述命令后用hwclock命令写到硬件RTC时钟:#hwclock—systohe在系统断电期间RTC时钟由电池来维持,下次启动通过hwclock—hctosys仍然可以将系统时钟设定正确。5.5网络配在bootloader中设置的开发板IP地址仅在bootloader阶段与主机通信时起作用。如果是NFSRoot方式启动,系统启动后的IP地址是由内核启动参数中的NFS设置决定的,这样系统启动后仍然可以读取主机的NFS导出目录。如果是Flash根文件系统启动,则启动之后需耍重新配置IP地址和激活网络接口,我们可以把配置写在启动脚本Vrootfs/etc/init.d/rcS中:ifup-a并且添加一个配置文件~/rootfs/etc/network/interfaces:autoloifaceloinetloopbackautoethOifup命令根据配置文件激活网络接口lo(loopback设备)和ethO(以太网接口)。.6httpdbusybox自带了一个Web服务器程序httpd,我们在启动脚本~/「001£$九1”5近.d/rcS中添加如下一行:httpd-h/srv/www这样httpd在启动时以daemon方式运行,使用默认的80端口(使用-p选项可以自己指定端口)。服务目录是/srv/www,如果浏览器请求/srv/n目录下的可执行文件,则被httpd当作CGI程序执行。我们在根文件系统中创建服务目录:~$mkdir-prootfs/srv/现在启动开发板系统,试验以下功能:0.编辑一个index.html放在〜/rootfs/srv/www下,从主机上打开浏览器,输入开发板的IP地址看能否浏览。.编辑一个shell脚本,加可执行权限,放在~/rootfs/srv/n下,从主机打开浏览器,输入该脚本的地址(例如)看能否得到执行结果。脚本如下所示:#!/bin/shecho“Content-Type:text/plain〃echoIs-a最终我们的启动脚本~/rootfs/etc/init.d/rcS是这样的:#!/bin/shmount-amount-ttmpfsmdev/devmdev-smkdir/dev/inputIn-s/dev/mice/dev/input/micehwclock—hctosysifup-ahttpd-h/srv/www.参考资料<BuildingEmbeddedLinuxSystems>byKarimYaghmour,O'Reilly出版附录资料:不需要的可以自行删除电脑相关技巧介绍主要介绍一下Windows操作系统在C盘空间不足的情况下,我们可以通过那些具体手段来增加C盘空间。.打开“我的电脑”-“工具”-“文件夹选项”-“查看”-在“显示所有文件和文件夹”选项前打勾-“确定”.删除以下文件夹中的内容:x:\DocumentsandSettings'用户名'Cookies'下的所有文件(保留index文件)x:\DocumentsandSettings'用户名'LocalSettings\Temp\下的所有文件(用户临时文件)x:\DocumentsandSettings'用户名\LocalSettings\TemporaryInternetFiles'下的所有文件(页面文件)x:\DocumentsandSettings'用户名\LocalSettings\History\下的所有文件(历史纪录)x:\DocumentsandSettings'用户名\Recent\下的所有文件(最近浏览文件的快捷方式)x:\WINDOWS\Temp\下的所有文件(临时文件)x:\WINDOWS\ServicePackFiles(升级spl或sp2后的备份文件)x:\WINDOWS\DriverCache\i386下的压缩文件(驱动程序的备份文件)x:\WINDOWS\SoftwareDistribution\download下的所有文件.如果对系统进行过windoesupdade升级,则删除以下文件:x:\windows'下以$u...开头的隐藏文件.然后对磁盘进行碎片整理,整理过程中请退出一切正在运行的程序.碎片整理后打开“开始程序”-“附件”-“系统工具系统还原”-“创建一个还原点”(最好以当时的日期作为还原点的名字)6,打开“我的电脑”-右键点系统盘-“属性”-“磁盘清理”-“其他选项”-单击系统还原一栏里的“清理”-选择“是"-ok了7、在各种软硬件安装妥当之后,其实XP需要更新文件的时候就很少To删除系统备份文件吧:开始f运行fsfc.exe/purgecache近3xxM。(该命令的作用是立即清除〃Windows文件保护〃文件高速缓存,释放出其所占据的空间)8、删掉\windows\system32\dllcache下dll档(减去200300mb),这是备用的dll档,只要你已拷贝了安装文件,完全可以这样做。9、XP会自动备份硬件的驱动程序,但在硬件的驱动安装正确后,一般变动硬件的可能性不大,所以也可以考虑将这个备份删除,文件位于\windows\drivercache\i386目录下,名称为driver,cab,你直接将它删除就可以了,通常这个文件是74Mo10、删除不用的输入法:对很多网友来说,WindowsXPt系统自带的输入法并不全部都合适自己的使用,比如IMJP8」日文输入法、IMKR6」韩文输入法这些输入法,如果用不着,我们可以将其删除。输入法位于\windows\ime\文件夹中,全部占用了88M的空间。11、升级完成发现windows'多了许多类似$NtUninstallQ311889$这些目录,都干掉吧,lx-3xM12、另外,保留着\windows\help目录下的东西对我来说是一种伤害,呵呵。。。都干掉!13、关闭系统还原:系统还原功能使用的时间一长,就会占用大量的硬盘空间。因此有必要对其进行手工设置,以减少硬盘占用量。打开〃系统属性〃对话框,选择〃系统还原〃选项,选择〃在所有驱动器上关闭系统还原〃复选框以关闭系统还原。也可仅对系统所在的磁盘或分区设置还原。先选择系统所在的分区,单击〃配置〃按钮,在弹出的对话框中取消〃关闭这个驱动器的系统还原〃选项,并可设置用于系统还原的磁盘空间大小。14、休眠功能会占用不少的硬盘空间,如果使用得少不妨将共关闭,关闭的方法是的:打开〃控制面板〃,双击〃电源选项〃,在弹出的〃电源选项属性〃对话框中选择〃休眠〃选项卡,取消〃启用休眠〃复选框。15、卸载不常用组件:XP默认给操作系统安装了一些系统组件,而这些组件有很大一部分是你根本不可能用到的,可以在〃添加/删除Windows组件〃中将它们卸载。但其中有一些组件XP默认是隐藏的,在〃添加/删除Windows组件〃中找不到它们,这时可以这样操作:用记事本打开\windows\inf\sysoc.inf这个文件,用查找/替换功能把文件中的〃hide〃字符全部替换为空。这样,就把所有组件的隐藏属性都去掉了,存盘退出后再运行〃添加-删除程序“,就会看见多出不少你原来看不见的选项,把其中那些你用不到的组件删掉(记住存盘的时候要保存为sysoc.inf,而不是默认的sysoc.txt),如Internal信使服务、传真服务、Windowsmessenger,码表等,大约可腾出近50MB的空间。16、清除系统临时文件:系统的临时文件一般存放在两个位置中:一个Windows安装目录下的Temp文件夹;另一个是x:\DocumentsandSettings〃用户名〃'LocalSettings\Temp文件夹(Y:是系统所在的分区)。这两个位置的文件均可以直接删除。17、清除Internet临时文件:定期删除上网时产生的大量Internet临时文件,将节省大量的硬盘空间。打开IE浏览器,从〃工具〃菜单中选择〃Internet选项〃,在弹出的对话框中选择〃常规〃选项卡,在〃Internet临时文件〃栏中单击〃删除文件〃按钮,并在弹出〃删除文件〃对话框,选中〃删除所有脱机内容〃复选框,单击〃确定〃按钮。18、清除预读文件:WindowsXP的预读设置虽然可以提高系统速度,但是使用一段时间后,预读文件夹里的文件数量会变得相当庞大,导致系统搜索花费的时间变长。而且有些应用程序会产生死链接文件,更加重了系统搜索的负担。所以,应该定期删除这些预读文件。预计文件存放在WindowsXP系统文件夹的Prefetch文件夹中,该文件夹下的所有文件均可删除。19、压缩NTFS驱动器、文件或文件夹:如果你的硬盘采用的是NTFS文件系统,空间实在紧张,还可以考虑启用NTFS的压缩功能。右击要压缩的驱动器一〃属性〃一〃常规〃一〃压缩磁盘以节省磁盘空间〃,然后单击〃确定〃,在〃确认属性更改〃中选择需要的选项。这样可以节省约20%的硬盘空间。在压缩C盘的时候,最好在安全模式下压缩,这样效果要好一些。20、关闭华医生Dr.Watson:要关闭Dr.Watson可打开注册表编辑器,找到〃HKEYLOCALMACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug〃分支,双击其下的Auto键值名称,将其〃数值数据〃改为0,最后按F5刷新使设置生效,这样就取消它的运行了。也在〃开始〃->〃运行〃中输入〃drwtsn32〃命令,或者"开始"-『程序〃附件“->〃系统工具”->〃系统信息〃->〃工具〃->〃DrWatson〃,调出系统里的华医生Dr.Watson,只保留〃转储全部线程上下文〃选项,否则一旦程序出错,硬盘会读很久,并占用大量空间。如以前有此情况,请查找user.dmp文件,删除后可节省几十MB空间。21、关闭远程桌面:〃我的电脑〃->〃属性〃->〃远程〃,〃远程桌面〃里的〃允许用户远程连接到这台计算机〃勾去掉。22、取消XP对ZIP支持:WindowsXP在默认情况下打开了对zip文件支持,这要占用一定的系统资源,可选择〃开始一运行〃,在〃运行〃对话框中键入〃regsvr32/uzipfldr.dll",回车确认即可取消XP对ZIP解压缩的支持,从而节省系统资源。23、关闭错误报告:当应用程序出错时,会弹出发送错误报告的窗口,其实这样的错误报告对普通用户而言几乎没有任何意义,关闭它是明智的选择。在〃系统属性”对话框中选择〃高级〃选项卡,单击“错误报告〃按钮,在弹出的〃错误汇报〃对话框中,选择〃禁用错误汇报〃单选项,最后单击〃确定〃即可。另外我们也可以从组策略中关闭错误报告:从〃运行〃中键入〃gpedit.msc〃,运行〃组策略编辑器〃,展开〃计算机配置一管理模板一系统一错误报告功能〃,双击右边设置栏中的〃报告错误〃,在弹出的〃属性〃对话框中选择〃已禁用〃单选框即可将〃报告错误〃禁用。24、关掉不用的设备:WindowsXP总是尽可能为电脑的所有设备安装驱动程序并进行管理,这不仅会减慢系统启动的速度,同时也造成了系统资源的大量占用。针对这一情况,你可在设备管理器中,将PCMCIA卡、调制解调器、红外线设备、打印机端口(LPT1)或者串口(COM1)等不常用的设备停用,方法是双击要停用的设备,在其属性对话框中的〃常规“选项卡中选择〃不要使用这个设备(停用)〃。在重新启动设置即可生效,当需要使用这些设备时再从设备管理器中启用它们。25、定期清理系统还原点:打开磁盘清理,选择其他选项一>清理系统还原点,点击清理。26、卸载不需要的程序,这个就不用我多说了27、其它优化:a将应用软件装在其它硬盘(不要安装在系统盘下,这对重装系统也有好处);b将“我的文档〃文件夹都转到其他分区:在桌面的〃我的文档〃图标上是右击鼠标,选择〃属性〃->〃移动〃;C将IE临时文件夹都转到其他分区:打开IE浏览器,选择〃工具〃-yinternet选项〃->〃常规〃->〃设置〃-〉〃移动文件夹〃;d把虚拟内存也转到其它硬盘;e把pages文件都指向一个地方:控制面板f系统f性能一高级一虚拟内存一更改,注意要点〃设置〃才会生效;f在桌面的“我的电脑〃图标上是右击鼠标,选择〃属性高级一性能设置〃一〉〃高级一虚拟内存〃,调至330—720。而且定时清理。主要介绍一下Windows操作系统在C盘空间不足的情况下,我们可以通过那些具体手段来增加C盘空间。.打开“我的电脑”-“工具”-“文件夹选项”-“查看”-在“显示所有文件和文件夹”选项前打勾-“确定”.删除以下文件夹中的内容:x:\DocumentsandSettings'用户名'Cookies'下的所有文件(保留index文件)x:\DocumentsandSettings'用户名\LocalSettings\Temp\下的所有文件(用户临时文件)x:\DocumentsandSettings'用户名\LocalSettings\TemporaryInternetFiles'下的所有文件(页面文件)x:\DocumentsandSettings'用户名\LocalSettings\History\下的所有文件(历史纪录)x:\DocumentsandSettings'用户名\Recent\下的所有文件(最近浏览文件的快捷方式)x:\WIND0WS\Temp\下的所有文件(临时文件)x:\WINDOWS\ServicePackFiles(升级spl或sp2后的备份文件)x:\WINDOWS\DriverCache\i386下的压缩文件(驱动程序的备份文件)办法的,只能更换匹配较好的版本。编译的步骤也是比较复杂的,主要有以下几步:0.根据目标平台配置内核源代码,生成内核头文件.编译binutils.编译器的自举(bootstnip),也就是先编译出gcc的部分功能(没有glibc支持,只有C编译器没有C++编译器).编译glibc.编译完整的gcc首先从stool下载crosstool-0.43.tar.gz,在主目录下解包~$tarxfcrosstool-0.43.tar.gz;cdcrosstool-0.43现在选择一种源码包的版本组合,各种版本组合的兼容性可以参考l/crosstool-0.43/buildlogs/,在此我们选择在arm平台上glibc版本较高,兼容性较好的一个组合:修改crosstool-0.43目录下的脚本demo-arm.sh,取消这一行开头的#号注释符:#eval"catarm.datgcc-4.0.2-glibc-2.3.6.dafshalLsh—notest同时将原本没有注释的这一行注释掉(前面加#号):eval'catarm.datgcc-4.1.0-glibc-2.3.2-tls.dafshall.sh—notest注意该脚本开头有TARBALLS_DIR=$HOME/downloadsRESULT_TOP=/opt/crosstool这说明,该脚本运行时,自动从和下载相关的源码包到主目录的downloads目录下,如果你已经下载过这些源码包,将它们拷到downloads目录下就可以不必再次下载了。对应于我们选择的版本组合,downloads目录下的源码包有:linux-2.6・x:\WINDOWS\SoftwareDistribution\download下的所有文件.如果对系统进行过windoesupdade升级,则删除以下文件:x:\windows\下以$u...开头的隐藏文件.然后对磁盘进行碎片整理,整理过程中请退出一切正在运行的程序.碎片整理后打开“开始”-“程序附件”-“系统工具系统还原”-“创建一个还原点”(最好以当时的日期作为还原点的名字).打开“我的电脑”-右键点系统盘-“属性”-“磁盘清理其他选项”-单击系统还原一栏里的“清理”-选择“是"-ok了7、在各种软硬件安装妥当之后,其实XP需要更新文件的时候就很少了。删除系统备份文件吧:开始f运行fsfc.exe/purgecache近3xxM。(该命令的作用是立即清除〃Windows文件保护〃文件高速缓存,释放出其所占据的空间)8、删掉\windows\system32\dncache下dll档(减去200300mb),这是备用的dll档,只要你已拷贝了安装文件,完全可以这样做。9、XP会自动备份硬件的驱动程序,但在硬件的驱动安装正确后,一般变动硬件的可能性不大,所以也可以考虑将这个备份删除,文件位于\windows\drivercache\i386目录下,名称为driver,cab,你直接将它删除就可以了,通常这个文件是74MO10、删除不用的输入法:对很多网友来说,WindowsXPt系统自带的输入法并不全部都合适自己的使用,比如IMJP8」日文输入法、IMKR6」韩文输入法这些输入法,如果用不着,我们可以将其删除。输入法位于\windows\ime\文件夹中,全部占用了88M的空间。11、升级完成发现windows'多了许多类似$NtUninstallQ311889$这些目录,都干掉吧,lx-3xM12、另外,保留着\windows\help目录下的东西对我来说是一种伤害,呵呵。。。都干掉!13、关闭系统还原:系统还原功能使用的时间一长,就会占用大量的硬盘空间。因此有必要对其进行手工设置,以减少硬盘占用量。打开〃系统属性〃对话框,选择〃系统还原〃选项,选择〃在所有驱动器上关闭系统还原〃复选框以关闭系统还原。也可仅对系统所在的磁盘或分区设置还原。先选择系统所在的分区,单击〃配置〃按钮,在弹出的对话框中取消〃关闭这个驱动器的系统还原〃选项,并可设置用于系统还原的磁盘空间大小。14、休眠功能会占用不少的硬盘空间,如果使用得少不妨将共关闭,关闭的方法是的:打开〃控制面板〃,双击〃电源选项〃,在弹出的〃电源选项属性〃对话框中选择〃休眠〃选项卡,取消〃启用休眠〃复选框。15、卸载不常用组件:XP默认给操作系统安装了一些系统组件,而这些组件有很大一部分是你根本不可能用到的,可以在〃添加/删除Windows组件〃中将它们卸载。但其中有一些组件XP默认是隐藏的,在〃添加/删除Windows组件〃中找不到它们,这时可以这样操作:用记事本打开\windows\inf\sysoc.inf这个文件,用查找/替换功能把文件中的〃hide〃字符全部替换为空。这样,就把所有组件的隐藏属性都去掉了,存盘退出后再运行〃添加-删除程序〃,就会看见多出不少你原来看不见的选项,把其中那些你用不到的组件删掉(记住存盘的时候要保存为sysoc.inf,而不是默认的sysoc.txt),如Internal信使服务、传真服务、Windowsmessenger,码表等,大约可腾出近50MB的空间。16、清除系统临时文件:系统的临时文件一般存放在两个位置中:一个Windows安装目录下的Temp文件夹;另一个是x:\DocumentsandSettings〃用户名〃\LocalSettings\Temp文件夹(Y:是系统所在的分区)。这两个位置的文件均可以直接删除。17、清除Internet临时文件:定期删除上网时产生的大量Internet临时文件,将节省大量的硬盘空间。打开IE浏览器,从〃工具〃菜单中选择〃Internet选项〃,在弹出的对话框中选择〃常规〃选项卡,在〃Internet临时文件〃栏中单击〃删除文件〃按钮,并在弹出〃删除文件〃对话框,选中〃删除所有脱机内容〃复选框,单击〃确定〃按钮。18、清除预读文件:WindowsXP的预读设置虽然可以提高系统速度,但是使用一段时间后,预读文件夹里的文件数量会变得相当庞大,导致系统搜索花费的时间变长。而且有些应用程序会产生死链接文件,更加重了系统搜索的负担。所以,应该定期删除这些预读文件。预计文件存放在WindowsXP系统文件夹的Prefetch文件夹中,该文件夹下的所有文件均可删除。19、压缩NTFS驱动器、文件或文件夹:如果你的硬盘采用的是NTFS文件系统,空间实在紧张,还可以考虑启用NTFS的压缩功能。右击要压缩的驱动器一〃属性〃一〃常规〃一〃压缩磁盘以节省磁盘空间〃,然后单击〃确定〃,在〃确认属性更改〃中选择需要的选项。这样可以节省约20%的硬盘空间。在压缩C盘的时候,最好在安全模式下压缩,这样效果要好一些。20、关闭华医生Dr.Watson:要关闭Dr.Watson可打开注册表编辑器,找到〃HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug〃分支,双击其下的Auto键值名称,将其〃数值数据〃改为0,最后按F5刷新使设置生效,这样就取消它的运行了。也在〃开始〃-〉〃运行〃中输入〃drwtsn32〃命令,或者〃开始〃-〉〃程序〃->〃附件〃->〃系统工具〃-〉〃系统信息〃-〉〃工具〃->〃DrWatson〃,调出系统里的华医生Dr.Watson,只保留〃转储全部线程上下文〃选项,否则一旦程序出错,硬盘会读很久,并占用大量空间。如以前有此情况,请查找user,dmp文件,删除后可节省几十MB空间。21、关闭远程桌面:〃我的电脑〃-〉〃属性〃->〃远程〃,〃远程桌面〃里的〃允许用户远程连接到这台计算机〃勾去掉。22、取消XP对ZIP支持:WindowsXP在默认情况下打开了对zip文件支持,这要占用一定的系统资源,可选择〃开始一运行〃,在〃运行〃对话框中键入〃regsvr32/uzipfldr.dll",回车确认即可取消XP对ZIP解压缩的支持,从而节省系统资源。23、关闭错误报告:当应用程序出错时,会弹出发送错误报告的窗口,其实这样的错误报告对普通用户而言几乎没有任何意义,关闭它是明智的选择。在〃系统属性〃对话框中选择〃高级〃选项卡,单击〃错误报告〃按钮,在弹出的〃错误汇报〃对话框中,选择〃禁用错误汇报〃单选项,最后单击〃确定〃即可。另外我们也可以从组策略中关闭错误报告:从〃运行〃中键入〃gpedit.msc〃,运行〃组策略编辑器〃,展开〃计算机配置一管理模板一系统一错误报告功能〃,双击右边设置栏中的〃报告错误〃,在弹出的〃属性〃对话框中选择〃已禁用〃单选框即可将〃报告错误〃禁用。24、关掉不用的设备:WindowsXP总是尽可能为电脑的所有设备安装驱动程序并进行管理,这不仅会减慢系统启动的速度,同时也造成了系统资源的大量占用。针对这一情况,你可在设备管理器中,将PCMCIA卡、调制解调器、红外线设备、打印机端口(LPTl)或者串口(0)乂1)等不常用的设备停用,方法是双击要停用的设备,在其属性对话框中的〃常规〃选项卡中选择〃不要使用这个设备(停用)〃。在重新启动设置即可生效,当需要使用这些设备时再从设备管理器中启用它们。25、定期清理系统还原点:打开磁盘清理,选择其他选项一〉清理系统还原点,点击清理。26、卸载不需要的程序,这个就不用我多说了27、其它优化:a将应用软件装在其它硬盘(不要安装在系统盘下,这对重装系统也有好处);b将〃我的文档〃文件夹都转到其他分区:在桌面的〃我的文档〃图标上是右击鼠标,选择〃属性〃-〉〃移动〃;c将IE临时文件夹都转到其他分区:打开IE浏览器,选择〃工具〃->〃internet选项常规〃->〃设置”->〃移动文件夹〃;d把虚拟内存也转到其它硬盘;e把pages文件都指向一个地方:控制面板f系统一性能一高级一虚拟内存一更改,注意要点〃设置〃才会生效;f在桌面的〃我的电脑〃图标上是右击鼠标,选择〃属性〃->〃高级一性能设置〃一>〃高级一虚拟内存〃,调至330—720。而且定时清理。整个编译结束后,交叉编译工具链将放在/opt/crosstool目录下,因此脚本需要在/opt下建子目录,如果不希望使用root权限运行该脚本,则需要事先给/opt目录设置写权限:~$sudochmoda+w/opt然后修改arm.dat,其中有TARGET=arm-unknown-linux-gnu这是按标准的命名规则为工具链命名的,但是通常我们都采用更简单的命名,很多软件的Makefile中交叉编译器默认也都采用简单的命名,为此我们把它改为TARGET=arm-linux。由于编译过程需要用到patch、bison、flex,确认你的系统中安装了这些软件包。在编译过程中可能还会遇到脚本的兼容性问题,如果你的Linux发行版将sh指向dash(例如Ubuntu),应将其改指向bash:$cd/bin$sudoIn-sfbashsh虽然用dash执行脚本时非常高效并且其实现完全遵守POSIX标准,然而现存的很多脚本(比如glibc中的脚本)有不符合POSIX标准的用法,所以仍需改用bash执行。准备就绪后,在crosstool-0.43目录下运行demo-arm.sh脚本开始编译。编译完成后,交叉编译工具链的可执行文件位于/opt/crosstool/gcc-4.0.2-glibc-2.3.6/arm-linux/bin目录,我们可以把这个路径添加到PATH环境变量中,例如将以下命令添加到〜/.bashrc启动脚本:此外,网上也可下载到已编译好的交叉编译工具链,比如,但是使用别人编译好的交叉编译工具链有很多限制,不能按自己的特殊需要对其定制,比如有些项目需要特定版本的gcc和glibc,再比如需要soft-float的编译器(生成指令模拟浮点数运算)。以上编译步骤需要很长时间,也可以直接从ftp下载已制作好的交叉编译工具链安装到主机:~$sudochmoda+w/opt~$tarxfcrosstool.tar.bz2-C/opt然后在~/.bashrc启动脚本中修改PATH环境变量。3.熟悉开发环境U-boot的基本使用方法连接好开发板的网线和串口线,启动minicom(配置成1152008N1,无FlowControl)。按下开发板电源,立刻按除回车以外的任意键,进入bootloader提示符AKAE2440#。如果没来及按键就已经启动了内核,可以按开发板上的RESET键重来。注意:u-boot的终端不能处理控制字符,不要用移动光标键或翻页键等,退格键可以用。按了产生控制字符的键再输入命令就会产生错乱,这时可以按下回车输入当前这条已经错乱的命令,然后在新的提示符下重新键入命令。输入printenv命令显示bootloader的参数。更改参数使用命令set或者setenv,如下图所示:上图中,setenvipaddr2表示设置开发板的IP地址为2。setenvnetmask表示设置子网掩码为。setenvserverip1表示设置与开发板相连的PC机IP是1。可以根据你的情况重新设置。为了统一起见,在后面的实验中,我们统一设置为:AKAE2440#setipaddr10

温馨提示

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

评论

0/150

提交评论