ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:29.53KB ,
资源ID:10623279      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10623279.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(构建嵌入式根文件系统.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

构建嵌入式根文件系统.docx

1、构建嵌入式根文件系统嵌入式系统根文件系统制作一、主机环境Linux vm-dev 2.6.9-42.EL RedHatEL4, VMWare6.0.3;gcc version 3.4.6 20060404 (Red Hat 3.4.6-3) Thread model: posixgcc version 3.4.6所需源文件:busybox-1.12.2.tar.bz2;二、用Busybox创建文件系统前提是:通过samba服务器把源码包busybox-1.12.2.tar.bz2拷贝到了虚拟机的/home/uptech目录1、解压busybox-1.12.2.tar.bz2,路径为rootvm

2、-dev cd /homerootvm-dev homemkdir hqrootvm-dev home# cd hqrootvm-dev hq#mkdir rootfsrootvm-dev hq# cd rootfsrootvm-dev rootfs#cp /home/uptech/busybox-1.12.0.tar.bz2 . -arfrootvm-dev rootfs# lsbusybox-1.12.0.tar.bz2rootvm-dev rootfs# tar -vxjf busybox-1.12.2.tar.bz2 rootvm-dev rootfs# cd busybox-1.12

3、.2rootvm-dev busybox-1.12.2# pwd/home/hq/rootfs/busybox-1.12.2rootvm-dev busybox-1.12.2# vi Makefilerootvm-dev busybox-1.12.2#修改Makefile中的ARCH和CROSS_COMPILE与本机的路径一致:CROSS_COMPILE ?= arm-linux- .ARCH ?= arm2、编译busybox。先make menuconfig,修改以下: rootvm-dev busybox-1.12.2# make menuconfigBusybox Settings -

4、Build Options -* Build BusyBox as a static binary (no shared libs)/直接编译成静态库,省事点(/opt/crosstools/gcc-3.4.6-glibc-2.3.6/bin/arm-linux-) Cross Compiler prefix/这里和Makefile里保持一致,应该写一处就行了Installation Options - Dont use /usr/使用usr目录Busybox Library Tuning - * Fancy shell prompts /一定要选上,否则很多转意字符无法识别Shells -C

5、hoose your default shell (ash) -/这里选择shell为ash,应该是默认选中的- ash/把ash这档的选项全部选上Miscellaneous Utilities - inotifyd/不选保存退出,直接make,make install。如果错误:miscutils/taskset.c:15: error: parse error before * tokenmiscutils/taskset.c:16: warning: function declaration isnt a prototypemiscutils/taskset.c: In function

6、 from_cpuset:miscutils/taskset.c:19: error: CPU_SETSIZE undeclared (first use in this function)miscutils/taskset.c:19: error: (Each undeclared identifier is reported only oncemiscutils/taskset.c:19: error: for each function it appears in.)miscutils/taskset.c:25: warning: implicit declaration of func

7、tion CPU_ISSETmiscutils/taskset.c:25: error: mask undeclared (first use in this function)miscutils/taskset.c: In function taskset_main:miscutils/taskset.c:67: error: cpu_set_t undeclared (first use in this function)miscutils/taskset.c:67: error: parse error before maskmiscutils/taskset.c:100: error:

8、 mask undeclared (first use in this function)miscutils/taskset.c:118: error: CPU_SETSIZE undeclared (first use in this function)miscutils/taskset.c:118: error: enumerator value for CNT_BIT not integer constantmiscutils/taskset.c:120: warning: implicit declaration of function CPU_ZEROmiscutils/taskse

9、t.c:124: warning: implicit declaration of function CPU_SET解决:进入make menuconfig:在 Miscellaneous Utilities - taskset 将其前的星号去掉即可如有错误:networking/interface.c:818: error: ARPHRD_INFINIBAND undeclared here (not in a function)networking/interface.c:818: error: initializer element is not constantnetworking/i

10、nterface.c:818: error: (near initialization for ib_hwtype.type)make1: * networking/interface.o Error 1make: * networking Error 2解决:networking/interface.c中添加#define ARPHRD_INFINIBAND 32 /* InfiniBand */-可以看到如下目录rootvm-dev busybox-1.12.2# ls _install/bin linuxrc sbin usrrootvm-dev busybox-1.12.2#3、用sh

11、ell脚本创建根文件系统的目录结构,并在想要建立根文件系统的地方运行此脚本。我是用root用户登陆的,直接创建了设备节点。rootvm-dev busybox-1.12.2#cd /home/hqrootvm-dev hq#mkdir root_standrootvm-dev hq#cd root_standrootvm-dev root_standpwd/home/hq/root_standrootvm-dev root_stand# vi build_fs.sh #!/bin/shecho makeing rootdirmkdir rootfscd rootfs echo makeing

12、dir: bin dev etc lib proc sbin sys usrmkdir bin dev etc lib proc sbin sys usr #8 dirsmkdir usr/bin usr/lib usr/sbin lib/modules #Dont use mknod, unless you run this Script as mknod -m 600 dev/console c 5 1mknod -m 666 dev/null c 1 3 echo making dir: mnt tmp varmkdir mnt tmp varchmod 1777 tmpmkdir mn

13、t/etc mnt/jiffs2 mnt/yaffs mnt/data mnt/tempmkdir var/lib var/lock var/log var/run var/tmpchmod 1777 var/tmp echo making dir: home root bootmkdir home root bootecho done rootvm-dev root_stand#执行这个sh:rootvm-dev root_stand# sh build_fs.sh makeing rootdirmakeing dir: bin dev etc lib proc sbin sys usrma

14、king dir: mnt tmp varmaking dir: home root bootdone创建出一个主文件夹rootfs,里面有一批文件:rootvm-dev root_stand# cd rootfs/rootvm-dev rootfs# lsbin boot dev etc home lib mnt proc root sbin sys tmp usr varrootvm-dev rootfs#4、把busybox源码目录下的etc的内容拷贝到这里的etc下rootvm-dev rootfs# cd etc/rootvm-dev etc# lsrootvm-dev etc# c

15、p -a /home/hq/rootfs/busybox-1.12.2/examples/bootfloppy/etc/* ./rootvm-dev etc# lsfstab init.d inittab profilerootvm-dev etc#5、修改拷贝过来的profile文件rootvm-dev etc# vi profile # /etc/profile: system-wide .profile file for the Bourne shellsecho Processing /etc/profile# no-op# Set search library pathecho Se

16、t search library pathexport LD_LIBRARY_PATH=/lib:/usr/lib# Set user pathecho Set user pathPATH=/bin:/sbin:/usr/bin:/usr/sbinexport PATH# Set PS1echo Set PS1HOSTNAME=/bin/hostname# 此处让shell提示符显示host名称的。是,不是,要注意# 会在进入根系统后显示Jackyexport PS1=e32m$USER$HOSTNAME wa$e00;37m # 此处e32m是让后面的“$USER$HOSTNAME wa”显

17、示为绿色# e00是关闭效果# e05是闪烁# 37m是让后面的显示为白色# 多个命令可以;号隔开echo All done!echo6、修改初始化文件inittab和fstabInittabrootvm-dev etc# vi inittab:sysinit:/etc/init.d/rcS:respawn:-/bin/sh:restart:/sbin/inittty2:askfirst:-/bin/sh:ctrlaltdel:/bin/umount -a -r:shutdown:/bin/umount -a -r:shutdown:/sbin/swapoff aFstabrootvm-dev

18、 etc# vim fstab proc /proc proc defaults 0 0none /tmp ramfs defaults 0 0mdev /dev ramfs defaults 0 0sysfs /sys sysfs defaults 0 07、修改初始化的脚本文件init.d/rcSrootvm-dev etc# vi init.d/rcS #! /bin/shecho Processing etc/init.d/rc.S#hostname $HOSTNAMEhostname up-techecho Mount all/bin/mount -aecho Start mdev.

19、/bin/echo /sbin/mdev proc/sys/kernel/hotplugmdev -secho *echo rootfs by NFS, s3c2410echo Created by lyj_uptech 2008.11.28echo Good Luckecho www.up-echo *echo8、创建一个空的mdev.conf文件,在挂载根文件系统时会用到的rootvm-dev etc# touch mdev.conf9、从本机拷贝passwd、shadow、group文件。rootvm-dev etc# cp /etc/passwd .rootvm-dev etc# cp

20、 /etc/shadow .rootvm-dev etc# cp /etc/group .修改passwd文件,把第一行和最后一行的bash修改成ash。10、把busybox默认安装目录中的文件全部复制到这里的rootfs中。会发现多了linuxrc - bin/busybox文件,这是挂载文件系统需要执行的。 rootvm-dev etc# cd .rootvm-dev rootfs# cp -rfv /home/hq/rootfs/busybox-1.12.2/_install/* ./OK,以上用busybox创建了一个基本的文件系统。PS: 如果编译busybox时选择动态库方式编译

21、,则需要查看生成的busybox使用哪些动态库,然后把它们拷贝到rootfs/lib目录下。rootvm-dev lib# arm-linux-readelf -d ./bin/busybox Dynamic section at offset 0xc1014 contains 21 entries:Tag Type Name/Value0x00000001 (NEEDED) Shared library: libm.so.60x00000001 (NEEDED) Shared library: libc.so.60x0000000c (INIT) 0xc2ec0x0000000d (FINI

22、) 0xa96b80x00000004 (HASH) 0x80e80x00000005 (STRTAB) 0xa4c40x00000006 (SYMTAB) 0x8b640x0000000a (STRSZ) 3505 (bytes)0x0000000b (SYMENT) 16 (bytes)0x00000015 (DEBUG) 0x00x00000003 (PLTGOT) 0xd10e40x00000002 (PLTRELSZ) 3112 (bytes)0x00000014 (PLTREL) REL0x00000017 (JMPREL) 0xb6c40x00000011 (REL) 0xb67

23、40x00000012 (RELSZ) 80 (bytes)0x00000013 (RELENT) 8 (bytes)0x6ffffffe (VERNEED) 0xb5a40x6fffffff (VERNEEDNUM) 20x6ffffff0 (VERSYM) 0xb2760x00000000 (NULL) 0x0可以看出,使用了libm.so.6和libc.so.6两个库。发现只拷贝这两个库还不够,还需要ld-linux.so.2和libgcc_s.so.1,也就是我编译出来的这个busybox需要4个动态库文件。# cp /opt/crosstools/gcc-3.4.6-glibc-2.

24、3.6/lib/libm.so.6 .# cp /opt/crosstools/gcc-3.4.6-glibc-2.3.6/lib/libc.so.6 .# cp /opt/crosstools/gcc-3.4.6-glibc-2.3.6/lib/ld-linux.so.2 .# cp /opt/crosstools/gcc-3.4.6-glibc-2.3.6/lib/libgcc_s.so.1 .这样,使用动态库可以节省一半左右的空间,不过效率有所降低。11.制作cramfs的文件系统rootvm-dev rootfs# cd .rootvm-dev root_stand# mkcramfs

25、 rootfs/ root.cramfs找不到mkcramfs解决办法:aptitude install cramfsprogs三、测试注意:前提是已烧写好uboot和内核镜像烧写文件系统1 开启windows 的tftp服务器,设置环境变量,保证开发板和windows在同一网段及开发板的tftp服务器的IP为windows的IP。up-class2410 # setenv serverip 192.168.1.126up-class2410 # setenv ipaddr 192.168.1.129up-class2410 # saveenvSaving Environment to NAN

26、D.Erasing Nand.Writing to Nand. done2. 下载并烧写到nand flash文件系统对应的分区中up-class2410 #tftp 0x30008000 root.cramfs up-class2410 #nand erase 0x280000 0x400000up-class2410 #nand write 0x30008000 0x280000 0x3000003. 设置启动参数up-class2410 # setenv bootcmd nand read 0x30008000 0x80000 0x200000; bootm此项是内核自动启动的参数,如果

27、已设置就不用再重新设置up-class2410 # setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200up-class2410 # saveenvSaving Environment to NAND.Erasing Nand.Writing to Nand. doneup-class2410 # printenvbootdelay=5baudrate=115200ethaddr=08:00:3e:26:0a:5bbootfile=uImagestdin=serialstdout=serialstder

28、r=serialfilesize=26D000fileaddr=30008000netmask=255.255.255.0ipaddr=192.168.1.129serverip=192.168.1.126bootcmd=nand read 0x30008000 0x80000 0x200000; bootmbootargs=root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200Environment size: 332/16380 bytes4.重启开发板up-class2410 #reset启动目标板,串口输出显示根文件系统已经加载

29、成功: U-Boot 1.3.2 (Nov 27 2016 - 17:43:03) DRAM: 64 MBFlash: 512 kBNAND: 64 MiBIn: serialOut: serialErr: serialFound DM9000 ID:90000a46 at address 10000000 !DM9000 work in 16 bus widthbd-bi_entaddr: 08:00:3e:26:0a:5beth_initMAC:8:0:3e:26:a:5b:Hit any key to stop autoboot: 0 NAND read: device 0 offset 0x80000, size 0x1b0000 1769472 bytes read: OK# Booti

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1