构建根文件系统

时间:2022-11-11 16:30:44

一、制作工具

①jffs2

#cd /work/GUI/xwindow/X/deps
#tar xzf zlib-1.2.3.tar.gz
#cd zlib-1.2.3
#./configure --shared --prefix=/usr
#make
#make install
然后编译mkfs.jffs2

#cd /work/tools
#tar xjf mtd-utils-05.07.23.tar.bz2
#cd mtd-utils-05.07.23/util
#make
#make install

制作/烧写jffs2映像文件
#cd /work/nfs_root
#mkfs.jffs2 -n -s 2048 -e 128k -d first_fs -o first_fs.jffs2

-s 一页的大小
-e 一块的大小
-d 源目录
-o 输出

 

②yaffs2

#cd work/system
 yaffs_source_util_large_smmall_page_nand.tar.bz2
 
 #tar xjf  yaffs_source_util_large_small_page_nand.tar.bz2
 #cd Developement_util_ok
 #cd yaffs2
 #cd utils
 #make
 #cp mkyaffs2image /usr/local/bin
 #chmod +x /usr/local/bin/mkyaffs2image

 

 

 

二、构建根文件系统

1./dev/console /dev/null
2.配置文件/etc/inittab
3.配置文件里面指定的应用程序
4.库文件
5.init本身,即busybox
以上就是最小根文件系统所需要的项

 

编译busybox
先阅读install文件可知道如何编译它

make menuconfig
make
make install(这里安装要注意)
安装到我们指定的某个文件里面
使用make CONFIG_PREFIX=/path/from/root install



编译需要在makefile里面加上cross_compiler里面加上arm-linux-,或者在busybox里面执行make menuconfig也可

 

 

一、创建console


现在上面编译后busybox目录是work/tmp/first_fs
在此目录下:ls /dev/console /dev/null -l
crw------- 1 root root 5, 1 2015-01-05 20:57 /dev/console
crw-rw-rw- 1 root root 1, 3 2015-01-05 20:30 /dev/null
那么根据它来创建console null等设备

#mkdir dev
#cd dev
#mknod console c 5 1
#mknod null c 1 3
#ls -l
显示:
 crw-r--r-- 1 root root 5, 1 2015-05-06 20:39 console
crw-r--r-- 1 root root 1, 3 2015-05-06 20:40 null
表示创建成功



二、配置项
#cd work/tmp/first_fs
#mkdir etc
#vim  etc/inittab

输入:
console::askfirst:-/bin/sh


三、安装c库
#cd /usr/local/arm/4.3.2
#find -name lib
显示以下库:
    ./lib
    ./arm-none-linux-gnueabi/lib
    ./arm-none-linux-gnueabi/libc/lib
    ./arm-none-linux-gnueabi/libc/thumb2/lib
    ./arm-none-linux-gnueabi/libc/thumb2/usr/lib
    ./arm-none-linux-gnueabi/libc/armv4t/lib
    ./arm-none-linux-gnueabi/libc/armv4t/usr/lib
    ./arm-none-linux-gnueabi/libc/usr/lib

 我们需要:
     /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
    /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib
 
 
 
 #cd /work/tmp/first_fs/
 #mkdir lib
 #mkdir usr/lib -p
 #cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so* /work/tmp/first_fs/lib -d
 #cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*so* /work/tmp/first_fs/usr/lib -d

 
 最小根文件系统已经完成。

 

制作文件系统:
  #mkfs.jffs2 -n -s 2048 -e 128KiB -d first_fs -o first_fs.jffs2
  #mkyaffs2image first_fs first_fs.yaffs2

 

 

 烧写jffs2:
     fs:
    nfs 30000000 192.168.1.17:/work/nfs_root/first_fs.jffs2
    nand erase.part root
    nand write.jffs2 30000000 260000 $filesize
     set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
 
     kernel:
    nfs 30000000 192.168.1.17:/work/nfs_root/uImage_new
    nand erase.part kernel
    nand write.jffs2 30000000 kernel
 

 

烧写yaffs2:
      fs:
    nfs 30000000 192.168.1.17:/work/nfs_root/first_fs.yaffs2     //这里不能使用nfs挂载,只能直接烧写
    nand erase.part root                         //原因是:内核还不支持dm9000c
    nand write.yaffs 30000000 260000 $filesize
     
     kernel:
    nfs 30000000 192.168.1.17:/work/nfs_root/uImage_new
    bootm 30000000  

 

 

 

 

三、使用mdev

可以查看mdev.txt

[1] mount -t sysfs sysfs /sys
[2] echo /bin/mdev > /proc/sys/kernel/hotplug
[3] mdev -s
[4] mount -t tmpfs mdev /dev
[5] mkdir /dev/pts
[6] mount -t devpts devpts /dev/pts
这6步就可以了。


所以:
[1] mount -t sysfs sysfs /sys
[4] mount -t tmpfs mdev /dev
    #cd ../first_fs_mdev
    #mkdir sys
应该怎么做?
#vim etc/fstab
    #device         mount-point    type     options     dump   fsck
    proc        /proc           proc    defaults    0       0
    sysfs           /sys           sysfs    default     0      0
    tmpfs           /dev           tmpfs    default     0      0


[2] echo /bin/mdev > /proc/sys/kernel/hotplug
[3] mdev -s
[5] mkdir /dev/pts
[6] mount -t devpts devpts /dev/pts
怎么做呢?
#vim etc/init.d/rcS
    mount -a
    mkdir /dev/pts/
    mount -t devpts devpts /dev/pts
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s