收藏 分享(赏)

1.S5PV210的根文件系统制作.doc

上传人:HR专家 文档编号:11523209 上传时间:2020-05-29 格式:DOC 页数:11 大小:155KB
下载 相关 举报
1.S5PV210的根文件系统制作.doc_第1页
第1页 / 共11页
1.S5PV210的根文件系统制作.doc_第2页
第2页 / 共11页
1.S5PV210的根文件系统制作.doc_第3页
第3页 / 共11页
1.S5PV210的根文件系统制作.doc_第4页
第4页 / 共11页
1.S5PV210的根文件系统制作.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、制作根文件系统一、 移植BusyBoxBusyBox是一个集成了一百多个最常用Linux命令和工具的软件。BusyBox包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例如grep、find、mount以及telnet。有些人将BusyBox称为Linux工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了Linux的许多工具和命令,也包含了Android系统的自带的shell。BusyBox将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。这样的集合可以替代大部分常用工具比如的GNU fileutils,shelluti

2、ls等工具,BusyBox提供了一个比较完善的环境,可以适用于任何小的或嵌入式系统。BusyBox 最初是由Bruce Perens在1996年为Debian GNU/Linux安装盘编写的。其目标是在一张软盘上创建一个可引导的GNU/Linux系统,这可以用作安装盘和急救盘。1. 下载BusyBox的源码包下载地址:http:/ 解压并进入目录# tar jxvf busybox-1.20.2.tar.bz2# cd busybox-1.20.23. 修改Makefile中的体系结构ARCH和交叉编译器前缀CROSS_COMPILE# vim Makefile把 164 行修改为:CROSS

3、_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-把 190 行修改为:ARCH = arm4. 配置BusyBoxBusyBox的配置程序和linux内核菜单配置方式简直一模一样。熟悉用make menuconfig方式配置linux内核的朋友很容易上手。# make menuconfig选上以下几项:Busybox Settings-Build Options- *Build BusyBox as a static binary(no shared libs)这个选项是一定要选上,这样才能把BusyBox编译成静

4、态链接的可执行文件,运行时才独立于其他函数库,否则需要其他库文件才能运行BusyBox。Busybox Library Tuning- *vi-style line editing commands选上VI风格的行编辑器命令。 *Fancy shell promptsLinux Module Utilities- Simplified modutils*insmod*rmmod*lsmod*modprobe*depmod取消选中Simplified modutils,使用完整的模块工具命令:insmod、rmmod确保支持mdev(mdev是udev设备文件系统的精简版),确保以下几项被选中:

5、Linux System Utilities-*mdev*Support /etc/mdev.conf*Support subdirs/symlinks*Support regular expressions substitutions when renaming dev*Support command execution at device addition/removal*Support loadingoffirmwares其它选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了,配置好后退出并保存。5. 编译BusyBox# make -j 26. 安装#

6、 make install在busybox-1.20.2目录下可以找到_install子目录,这就是刚才的安装目录。7. 分析# ls -l /bin总用量 7816-rwxr-xr-x 1 root root 916692 2011-05-18 17:54 bash-rwxr-xr-x 3 root root 30216 2011-12-14 00:23 bunzip2-rwxr-xr-x 1 root root 1490940 2011-09-01 23:59 busybox-rwxr-xr-x 3 root root 30216 2011-12-14 00:23 bzcatlrwxrwx

7、rwx 1 root root 6 2011-12-14 00:23 bzcmp - bzdiff-rwxr-xr-x 1 root root 2140 2011-12-14 00:23 bzdifflrwxrwxrwx 1 root root 6 2011-12-14 00:23 bzegrep - bzgrep-rwxr-xr-x 1 root root 4877 2011-12-14 00:23 bzexelrwxrwxrwx 1 root root 6 2011-12-14 00:23 bzfgrep - bzgrep-rwxr-xr-x 1 root root 3642 2011-1

8、2-14 00:23 bzgrep-rwxr-xr-x 3 root root 30216 2011-12-14 00:23 bzip2-rwxr-xr-x 1 root root 9596 2011-12-14 00:23 bzip2recoverlrwxrwxrwx 1 root root 6 2011-12-14 00:23 bzless - bzmore-rwxr-xr-x 1 root root 1297 2011-12-14 00:23 bzmore-rwxr-xr-x 1 root root 38484 2011-02-23 21:22 cat可以看到主机/bin目录下的大部分命

9、令都是可执行程序。# ls -l _install/bin总用量 1892lrwxrwxrwx 1 root root 7 2012-12-21 11:41 addgroup - busyboxlrwxrwxrwx 1 root root 7 2012-12-21 11:41 adduser - busyboxlrwxrwxrwx 1 root root 7 2012-12-21 11:41 ash - busyboxlrwxrwxrwx 1 root root 7 2012-12-21 11:41 base64 - busybox-rwxr-xr-x 1 root root 1937112

10、2012-12-21 11:41 busyboxlrwxrwxrwx 1 root root 7 2012-12-21 11:41 cat - busyboxlrwxrwxrwx 1 root root 7 2012-12-21 11:41 catv - busyboxlrwxrwxrwx 1 root root 7 2012-12-21 11:41 chattr - busybox可以看到_install/bin目录下的命令都是指向busybox可执行程序的软链接,这样做出来的文件系统会比较很小,一般只有几MB,很适合只有几十MB Flash空间的嵌入式系统。二、 加入必要的目录与文件1.

11、改_install为mini_rootfs# mv_installmini_rootfs# cd mini_rootfs下面的操作都是在mini_rootfs目录里进行的!2. 创建必要的目录和文件建立一个名为create_rootfs.sh的脚本文件:# vim create_rootfs.sh内容如下:#!/bin/shecho -1.Create root directons starting-#mkdir bin sbin usr mkdir lib etc dev sys proc tmp var opt mnt home root media mkdir home/gec echo

12、 -2.Create usr sub-directons starting-cd usr#mkdir bin sbinmkdir lib local echo -3.Create usr/local sub-directons starting-cd localmkdir bin sbin lib cd ./.echo -4.Create etc sub-directons file starting-cd etctouch inittabtouch fstabtouch profiletouch passwdtouch grouptouch shadowtouch resolv.confto

13、uch mdev.conftouch inetd.confmkdir rc.dmkdir init.dtouch init.d/rcSchmod +x init.d/rcSmkdir sysconfigtouch sysconfig/HOSTNAMEcd .echo -5.Create dev inode starting-cd devmknod console c 5 1chmod 777 consolemknod null c 1 3chmod 777 nullcd .echo -6.Create var sub-directons starting-cd varmkdir logcd .

14、echo -7.Create etc sub-directons file starting-mkdir etc/hotplug/usb -pmkdir etc/hotplug/sd -ptouch etc/hotplug/usb/udisk_inserttouch etc/hotplug/usb/udisk_removetouch etc/hotplug/sd/sd_inserttouch etc/hotplug/sd/sd_remove chmod +x etc/hotplug/usb/udisk_insertchmod +x etc/hotplug/usb/udisk_removechm

15、od +x etc/hotplug/sd/sd_insertchmod +x etc/hotplug/sd/sd_remove执行该脚本以生成必要的目录与文件:# source create_rootfs.sh# rm create_rootfs.sh3. 拷贝交叉编译器里的动态链接库到lib目录只需要拷贝交叉编译器里的动态链接库及其软链接到lib目录就好了,静态链接库不用拷贝:# cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib -rdf4. 对lib目录下的动态链接库进行裁减动态链接库包

16、括了符号信息,可以去掉不必要的符号信息,使用动态链接库变得更小巧:# arm-none-linux-gnueabi-strip lib/*so*5. 修改脚本文件etc/inittab文件是启动流程文件,它的内容为::sysinit:/etc/init.d/rcS:askfirst:-/bin/sh:ctrlaltdel:-/sbin/reboot:shutdown:/bin/umount-a-r:restart:/sbin/init可以看到它会执行/etc/init.d/rcS脚本,并启动shell程序/bin/sh。etc/init.d/rcS文件的内容为:#!/bin/shPATH=/s

17、bin:/bin:/usr/sbin:/usr/binrunlevel=Sprevlevel=Numask 022export PATH runlevel prevlevelmount-aecho/sbin/mdev/proc/sys/kernel/hotplugmdev-s/bin/hostname-F /etc/sysconfig/HOSTNAMEifconfig eth0 192.168.0.80inetd &telnetd &设置变量PATHS, s Single user mode设置文件权限掩码umask=022导出环境环境PATH runlevel prevlevelmount

18、-a会读取etc/fstab完成文件系统挂载当内核有热插拨事件时调用/sbin/mdev启动mdev将HOSTNAME设置为 /etc/sysconfig/HOSTNAME的内容配置以太网接口0的IP地址启动inetd 启动telnetd etc/fstab文件的内容为:# /etc/fstab:static file system information.# Usevol_id -uuidto print the universally unique identifierfora# device;thismay be used with UUID=as a more robust way t

19、onamedevices# that works evenifdisks are addedandremoved.See fstab(5).#proc /proc proc defaults 0 0sysfs /sys sysfs defaults 0 0tmpfs /var tmpfs defaults 0 0tmpfs /tmp tmpfs defaults 0 0tmpfs /dev tmpfs defaults 0 0/proc目录挂载了procfs文件系统,/sys目录挂载了sysfs文件系统,var和tmp及dev目录挂载的是tmpfs临时文件系统。etc/profile文件用于设

20、置环境变量,它的内容为:# Ash profile# vim:syntax=sh# No core files by defaultulimit-S-c 0/dev/null 2&1USER=id -unLOGNAME=$USERPS1=uh W# PATH=$PATHHOSTNAME=/bin/hostnameexport USER LOGNAME PS1 PATHexport LD_LIBRARY_PATH=lib:/usr/lib:$LD_LIBRARY_PATH由上面可知:可执行程序查找的目录为PATH=/sbin:/bin:/usr/sbin:/usr/bin动态链接库查找的目录为L

21、D_LIBRARY_PATH=lib:/usr/libetc/resolv.conf是DNS域名解析的配置文件,它的内容为:nameserver 202.96.128.166(http:/ #:INTERNAL: Internal servicesecho stream tcp nowait root internalecho dgram udp wait root internaldaytime stream tcp nowait root internaldaytime dgram udp wait root internaltime stream tcp nowait root inte

22、rnaltime dgram udp wait root internal# These are standard services.# 21 stream tcp nowait root ftpd ftpd /home/gectelnet stream tcp nowait root telnetd telnetd /etc/sysconfig/HOSTNAME文件记录了主机名,它内容为你的英文名字。可以在HOSTNAME文件中添加GEC210etc/passwd、etc/group、etc/shadow分别是用户和用户组及密钥文件,它们的内容暂时为空。etc/mdev.conf是mdev设

23、备文件系统的配置文件,内容为:sda-z0-90:0 666 /etc/hotplug/usb/udisk_insertsda-z0:0 666 $ /etc/hotplug/usb/udisk_removemmcblk0-9p0-90:0 666 /etc/hotplug/sd/sd_insertmmcblk0-90:0 666 $ /etc/hotplug/sd/sd_removeetc/hotplug/usb/udisk_insert文件的内容为:#!/bin/shmkdir -p /media/udiskmount -t vfat /dev/sda1 /media/udisketc/h

24、otplug/usb/udisk_remove文件的内容为:#!/bin/shumount /media/udisketc/hotplug/sd/sd_insert文件的内容为:#!/bin/shmkdir -p /media/sdmount -t vfat /dev/mmcblk0p1 /media/sdetc/hotplug/sd/sd_remove文件的内容为:#!/bin/shumount /media/sd最后,回到上级目录:# cd .三、 构建根文件系统镜像1. 获得mkyaffs2image工具的源码包下载地址:http:/ 编译mkyaffs2image工具# tar xvf

25、 yaffs2-source.tar# cd yaffs2/utils# make # cp mkyaffs2image /usr/local/bin/3. 制作根文件系统镜像回到busybox那个目录:# mkyaffs2image mini_rootfs rootfs.img四、 根文件系统镜像rootfs.img下载与烧写下面的操作在u-boot上进行:SMDKV210 # nand erase 0xe00000 0xF200000SMDKV210 # tftp 0x40000000 rootfs.imgSMDKV210 # nand write.yaffs 0x40000000 0xe

26、00000 0x6aa340 (要把最后一个数字改为传输的字节数!)五、 用户管理在文件系统正常运行起来后,使用adduser命令(下面的操作均在开发板上进行):# adduser root会打印出如下消息:passwd:unknown uid 0这表示不能为该用户设置密码,此时你会发现passwd命令也无法使用。解决的办法是,用vi打开/etc/passwd文件,其内容为:root:x:1000:1000:Linux User,:/home/root:/bin/sh将用户ID和组ID均修改为0。用vi打开/etc/group文件,其内容为:root:x:1000:同样将组ID修改为0。然后,

27、passwd命令就可以正常使用了。这时为root用户设置口令:# passwd root根据提示输入一个强密码。六、 NFS配置1. 将迷你根文件系统拷贝到根目录# cp /root/build_rootfs/busybox-1.20.2/mini_rootfs/ / -rdf2. 配置NFS服务器# vi /etc/exports内容如下:/mini_rootfs *(rw,sync,no_root_squash)启动NFS服务器:# service nfs restart3. 测试NFS服务器# mount -t nfs 192.168.0.41:/mini_rootfs /mnt其中19

28、2.168.0.41是你的虚拟机系统的IP地址。# ls /mnt可以查看得到/ mini_rootfs目录的文件。最后卸载:# umount /mnt4. 配置内核以支持NFS启动# cd /root/build_kernel/android-kernel-samsung-dev# make menuconfigIP要支持内核底层配置:* Networking support -Networking options -* IP: kernel level autoconfiguration 文件系统要支持NFS客户端和用NFS作根文件系统:File systems - * Network F

29、ile Systems - Network File Systems NFS client support * NFS client support for NFS version 3 * NFS client support for the NFSv3 ACL protocol extension * NFS client support for NFS version 4 (EXPERIMENTAL) * NFS client support for NFSv4.1 (DEVELOPER ONLY) * Root file system on NFS# make uImage -j 2重新

30、下载烧写新内核镜像。SMDKV210 # tftp 0x40000000 uImage 下载uImage到0x40000000地址SMDKV210 # nand erase 0x600000 0x500000 擦除kernel分区SMDKV210 # nand write 0x40000000 0x600000 0x500000 将uImage写入kernel分区5. 在u-boot那里修改启动参数新的从NFS启动:SMDKV210 # setenv bootargs console=ttySAC0,115200 root=/dev/nfs rw nfsroot=192.168.0.41:/mini_rootfs ip=192.168.0.80:192.168.0.1:255.255.255.0:eth0:off init=/linuxrc原来的从NAND启动:SMDKV210 # setenv bootargs console=ttySAC0,115200 root=/dev/mtdblock4 rootfstype=yaffs rw其中192.168.0.41是你的虚拟机系统的IP地址。/mini_rootfs是虚拟机系统的NFS服务器的共享目录。ip=192.168.0.80:192.168.0.1:255.255.255.0分别指定的是开发板的IP,网关地址,子网掩码。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报