Linux2.6.22.19移植到S3C2410(gec2410)之: nfs根文件系统
参考文献:
1. 《构建基本的嵌入式Linux根文件系统》
http://blog.chinaunix.net/u1/34474/showart_485837.html
2. 《Linux 2.6.24.4移植到S3C2410之:建立nfs根文件系统(busybox1.9.2)》
http://blog.chinaunix.net/u2/63560/showart_518011.html
参考文献:
1. 《构建基本的嵌入式Linux根文件系统》
http://blog.chinaunix.net/u1/34474/showart_485837.html
2. 《Linux 2.6.24.4移植到S3C2410之:建立nfs根文件系统(busybox1.9.2)》
http://blog.chinaunix.net/u2/63560/showart_518011.html
平台信息:
目标板 :GEC2410
OS :Fedora Cor8(FC8)
编译器 :arm-linux-3.4.1 (低了不行、高了也出错)
根文件 :busybox 1.9.2
目标板 :GEC2410
OS :Fedora Cor8(FC8)
编译器 :arm-linux-3.4.1 (低了不行、高了也出错)
根文件 :busybox 1.9.2
移植步骤 : (以下步骤我基本是copy我的参考文献1Tekkaman的移植文档,他写得真好,偶像啊!)
1. 创建根文件系统的基本目录结构。
网上有很多关于制作根文件的文章是先对busybox进行配置、编译和安装,再独立见一个根文件目录和其子目录后把安装好的busybox的内容复制过来。个人感觉这种方法很是麻烦,还不如先把根文件的目录环境全都建立好,在安装busybox的时候直接安装到建立好的根文件目录环境下,少了复制的麻烦!
关于这个目录环境的建立,我们可以直接把这个过程做成shell脚本(文件名为mkroot) ,很方便!
1. 创建根文件系统的基本目录结构。
网上有很多关于制作根文件的文章是先对busybox进行配置、编译和安装,再独立见一个根文件目录和其子目录后把安装好的busybox的内容复制过来。个人感觉这种方法很是麻烦,还不如先把根文件的目录环境全都建立好,在安装busybox的时候直接安装到建立好的根文件目录环境下,少了复制的麻烦!
关于这个目录环境的建立,我们可以直接把这个过程做成shell脚本(文件名为mkroot) ,很方便!
#! /bin/sh
echo "creatint rootfs dir......" mkdir rootfs cd rootfs
echo
"making dir : bin dev etc lib proc sbin sys usr"
mkdir bin dev etc lib proc sbin sys usr #必备的8个目录 mkdir usr/bin usr/lib usr/sbin lib/modules
# only root can use mknod ! 只有root才有权限使用mknod命令
mknod -m 600 dev/console c 5 1 mknod -m 666 dev/null c 1 3
echo
"making dir : mnt tmp var"
mkdir mnt tmp var chmod 1777 tmp mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp mkdir var/lib var/lock var/log var/run var/tmp chmod 1777 var/tmp
echo
"making dir : home root boot" mkdir home root boot echo "done" |
在你想要建立根文件系统的地方,运行:(我的工作目录是/yoso/filesystem/nfs,所以我就把上边的shell脚本放在nfs目录下)
# ./mkroot 输出以下信息
creatint rootfs dir...... making dir : bin dev etc lib proc sbin sys usr making dir : mnt tmp var making dir : home root boot done |
2. 配置、编译和安装Busybox-1.9.2
解压Busybox-1.9.2 ,我直接解压在/yoso/filesystem/目录下
# tar -xjvf busybox-1.9.2.tar.bz2
修改Makefile文件:
# vi Makefile (在第174行)
ARCH ?= arm
CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-
# make menuconfig
在原有的基础上修改如下:
解压Busybox-1.9.2 ,我直接解压在/yoso/filesystem/目录下
# tar -xjvf busybox-1.9.2.tar.bz2
修改Makefile文件:
# vi Makefile (在第174行)
ARCH ?= arm
CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-
# make menuconfig
在原有的基础上修改如下:
Busybox Settings --->
Installation Options --->
[*] Don't use /usr
(/yoso/filesystem/nfs/rootfs) BusyBox installation prefix //这里设置你要安装的目录,也就是上面所建立的根文件目录
Busybox Library Tuning --->
(2) MD5: Trade Bytes for Speed
[*] Faster /proc scanning code (+100 bytes)
[*] Support for /etc/networks
[*] Support for /etc/networks
[*] Additional editing keys
[*] vi-style line editing commands
[*] History saving
[*] Tab completion
[*] Username completion
[*] Fancy shell prompts
Linux Module Utilities --->
[*] Support version 2.6.x Linux kernels
[N] Support version 2.2.x to 2.4.x Linux kernels
Shells --->
--- Ash Shell Options 下的选项全选
Build Options ---> (采用动态lib链接)
[ ] Build BusyBox as a static binary (no shared libs)
Installation Options --->
[*] Don't use /usr
(/yoso/filesystem/nfs/rootfs) BusyBox installation prefix //这里设置你要安装的目录,也就是上面所建立的根文件目录
Busybox Library Tuning --->
(2) MD5: Trade Bytes for Speed
[*] Faster /proc scanning code (+100 bytes)
[*] Support for /etc/networks
[*] Support for /etc/networks
[*] Additional editing keys
[*] vi-style line editing commands
[*] History saving
[*] Tab completion
[*] Username completion
[*] Fancy shell prompts
Linux Module Utilities --->
[*] Support version 2.6.x Linux kernels
[N] Support version 2.2.x to 2.4.x Linux kernels
Shells --->
--- Ash Shell Options 下的选项全选
Build Options ---> (采用动态lib链接)
[ ] Build BusyBox as a static binary (no shared libs)
# make
# make install
# make install
3. 因为是使用动态编译所以查看一下需要的动态库
[root@yoso busybox-1.9.2]# /usr/local/arm/3.4.1/bin/arm-linux-readelf -d busybox
4. 修改和创建必要的文件。
[root@yoso busybox-1.9.2]# /usr/local/arm/3.4.1/bin/arm-linux-readelf -d busybox
4. 修改和创建必要的文件。
# cp -a examples/bootfloppy/etc/* /yoso/filesystem/nfs/rootfs/etc/
# cd nfs/rootfs/etc/
|
(1)增加为SHELL导入全局变量的文件etc/profile
#vi profile
# /etc/profile: system-wide .profile file for the Bourne shells
echo echo "Processing /etc/profile... " # no-op
# Set search library path
echo "Set search library path in /etc/profile" export LD_LIBRARY_PATH=/lib:/usr/lib
# Set user path
echo "Set user path in /etc/profile" PATH=/bin:/sbin:/usr/bin:/usr/sbin export PATH
# Set PS1
#注意:ash 除了SHELL变量外,支持\u、\h、\W、\$、\!、\n、\w 、\nnn(ASCII字符对应的八进制数) #以及\e[xx;xxm (彩色特效)等等! #而且前面还要多加一个 '\'!
echo "Set PS1 in /etc/profile"
export PS1="\\e[05;32m[$USER@\\w\\a]\\$\\e[00;34m"
echo "Done" echo |
(2) 增加初始化文件
#vi inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh tty2::askfirst:-/bin/sh ::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r ::shutdown:/sbin/swapoff -a |
#vi fstab
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0 mdev /dev ramfs defaults 0 0 sysfs /sys sysfs defaults 0 0 |
(3)增加初始化脚本
#vi init.d/rcS
#! /bin/sh
echo "----------mount all" /bin/mount -a
echo "----------Starting mdev......"
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s
echo "*********************************************************" echo " thank you Tekkaman " echo " gec2410 Rootfs(nfs) 2009.4 yoso.Jeff " echo "********************************************************" |
(4)删除备份文件
#rm *~ init.d/*~ //貌似我没有这些文件
#rm *~ init.d/*~ //貌似我没有这些文件
(5)为mdev创建配置文件
# vi mdev.conf
创建一个mdev.conf文件,内容可有可无。
--------------------------------------------------------------------------------
# vi mdev.conf
创建一个mdev.conf文件,内容可有可无。
--------------------------------------------------------------------------------
5. 复制主机/etc/下面的文件passwd, group, shadow文件到/etc
# cp /etc/group . # cp /etc/passwd . # cp /etc/shadow . 一般上边的文件有很多内容,且基本是不需要的,而我们需要的仅是root账号的 #vi passwd root:x:0:0:root:/root:/bin/sh #vi group root:x:0:root #vi shadow root:$1$N8K8eEQe$.XkJo3xcsjOE6vo1jW9Nk/:13923:0:99999:7::: |
那么现在 root的登陆密码和Host的登陆口令一致了,可以登录后再修改以及创建新用户。( 若使用以上文件,则root密码为tekkaman)
6.拷贝必需的动态库文件
[root@yoso lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/ld* . cp:略过目录 “usr/local/arm/3.4.1/arm-linux/lib/ldscripts” [root@yoso lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/libc-2.3.2.so . [root@yoso lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/libc.so.6 . [root@yoso lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/libm-* . [root@yoso lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/libm.s* . [root@yoso lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/libcrypt-* . [root@yoso lib]# cp /usr/local/arm/3.4.1/arm-linux/lib/libcrypt.s* . |
以上是最基本的文件。
一个最基本根文件系统构建完成!未压缩的文件系统总大小<?XML:NAMESPACE PREFIX = ST1 />4M左右。
7. 通过nfs来挂载根文件系统
启用host PC上的nfs rootfs文件夹/yoso/filesystem/nfs/rootfs # vi /etc/exports /yoso/filesystem/nfs/rootfs *(rw,sync,no_root_squash) # 如果PC通过路由器连接targetboad 请使用下面的配置,否则targetboad不能访问 # Pc上的nfs. 192.168.0.xxx我的局域网使用的网段 # rw:可读写,no_root_squash:允许非root用户操作改文件夹 /yoso/filesystem/nfs/rootfs 192.168.0.xxx(rw,sync,no_root_squash) 以root身份启动nfs 服务: # /etc/init.d/nfs start |
8. 设定uboot的命令行参数
bootargs=console=ttySAC0,115200 root=/dev/nfs init=/linuxrc nfsroot=192.168.0.104:/yoso/filesystem/nfs/rootfs ip=192.168.0.69:192.168.0.104:192.168.0.1:255.255.255.0:www.yoso.com:eth0:off
根据:
targetboard IP addr : 192.168.0.69
Host PC IP addr : 192.168.0.104
Gateway : 192.168.0.1
Nfs dir : 192.168.0.104: /yoso/filesystem/nfs/rootfs
bootargs=console=ttySAC0,115200 root=/dev/nfs init=/linuxrc nfsroot=192.168.0.104:/yoso/filesystem/nfs/rootfs ip=192.168.0.69:192.168.0.104:192.168.0.1:255.255.255.0:www.yoso.com:eth0:off
根据:
targetboard IP addr : 192.168.0.69
Host PC IP addr : 192.168.0.104
Gateway : 192.168.0.1
Nfs dir : 192.168.0.104: /yoso/filesystem/nfs/rootfs
9. 启动~~
说明:
1.如果你觉得使用nfs挂载挺麻烦的,那你就直接把它烧写成cramfs等根文件系统吧!方法很简单,下载相应的工具编译即可! 下边我以制作cramfs根文件为例说明:
(1) 下载mkcramfs工具,解压!
(2) 把mkcramfs工具拷贝到rootfs同级目录下;
(3) 使用命令:./mkcramfs rootfs gec2410_demo.cramfs –e 2.6.22.19
(4) 好了,这样就会在同级目录下出现gec2410_demo.cramfs根文件了。
1.如果你觉得使用nfs挂载挺麻烦的,那你就直接把它烧写成cramfs等根文件系统吧!方法很简单,下载相应的工具编译即可! 下边我以制作cramfs根文件为例说明:
(1) 下载mkcramfs工具,解压!
(2) 把mkcramfs工具拷贝到rootfs同级目录下;
(3) 使用命令:./mkcramfs rootfs gec2410_demo.cramfs –e 2.6.22.19
(4) 好了,这样就会在同级目录下出现gec2410_demo.cramfs根文件了。
yaffs根文件系统制作:
1)工具mkyaffsp_w_picpath cp到rootfs同级目录下
2)./mkyaffsp_w_picpath rootfs rootfs.img
2.如果你不想想使用系统集成的用户登录功能,则可以移植TinyLogin,具体方法参考我的参考文献1。
3.关于动态编译busybox还是静态编译busybox,这个得看你自个了!一般静态编译的方法可以省去了查找共享库的麻烦,但是要想运行自己写的程序极为不方便,它需要自己写的程序也必须为静态编译的。而动态编译虽然麻烦点,但至少没有这方面的不爽。
2.如果你不想想使用系统集成的用户登录功能,则可以移植TinyLogin,具体方法参考我的参考文献1。
3.关于动态编译busybox还是静态编译busybox,这个得看你自个了!一般静态编译的方法可以省去了查找共享库的麻烦,但是要想运行自己写的程序极为不方便,它需要自己写的程序也必须为静态编译的。而动态编译虽然麻烦点,但至少没有这方面的不爽。
转载于:https://blog.51cto.com/19831028/282492