Linux2.6.22.19移植到S3C2410(gec2410)之: nfs根文件系统

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
                 
平台信息:
目标板    :GEC2410
OS         :Fedora Cor8(FC8)
编译器    :arm-linux-3.4.1 (低了不行、高了也出错)
根文件    :busybox 1.9.2
             
移植步骤 : (以下步骤我基本是copy我的参考文献1Tekkaman的移植文档,他写得真好,偶像啊!)
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 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)
# make
# make install
                         
3. 因为是使用动态编译所以查看一下需要的动态库
[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/*~ //貌似我没有这些文件
(5)为mdev创建配置文件
   # 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* .
以上是最基本的文件。
一个最基本根文件系统构建完成!未压缩的文件系统总大小 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
9. 启动~~
说明:
1.如果你觉得使用nfs挂载挺麻烦的,那你就直接把它烧写成cramfs等根文件系统吧!方法很简单,下载相应的工具编译即可! 下边我以制作cramfs根文件为例说明:
(1) 下载mkcramfs工具,解压!
(2) 把mkcramfs工具拷贝到rootfs同级目录下;
(3) 使用命令:./mkcramfs rootfs gec2410_demo.cramfs �Ce 2.6.22.19
(4) 好了,这样就会在同级目录下出现gec2410_demo.cramfs根文件了。
yaffs根文件系统制作:
  1)工具mkyaffsimage cp到rootfs同级目录下
  2)./mkyaffsimage rootfs rootfs.img
2.如果你不想想使用系统集成的用户登录功能,则可以移植TinyLogin,具体方法参考我的参考文献1。
3.关于动态编译busybox还是静态编译busybox,这个得看你自个了!一般静态编译的方法可以省去了查找共享库的麻烦,但是要想运行自己写的程序极为不方便,它需要自己写的程序也必须为静态编译的。而动态编译虽然麻烦点,但至少没有这方面的不爽。

你可能感兴趣的:(linux,职场,休闲,nfs根文件系统)