关闭

[置顶] 在VM上学习嵌入式Linux系统的构建之二--内存文件系统

标签: linux嵌入式systemredhatfile磁盘
594人阅读 评论(0) 收藏 举报
分类:

上一篇文章说到了内核编译的问题,这篇文章记录了构造根文件系统的过程。

先大概说一下过程:原先想根据网上一些文章的内容,直接构建一个initrd,从我的redhat中把需要的目录、文件、库考过去,发现在挂在文件系统时出错,折腾了半天也没搞定。后来使用busybox,经过几天挣扎之后,终于看到可爱的concole了 ,下面把过程记录如下。

1、内核编译选项的调整

     1.1 由于一开始总挂不上文件系统,所以在内核配置时,加了几个File System的选项,对具体选项的作用还要研究。 Compressed ROM file system support 、 Virtual  file system support 、/proc  file system support 、/dev  file system support 等等。 

     1.2 如果VM把光驱和磁盘虚拟成 SICI 设备的话,还要选上 SICI support 。

2、建立ext2格式的文件系统印像initrd.img

    2.1 创建一个空文件,将/dev/zero(0字符流)做为initrd.img的输入,块大小为1024,共4M空间。

               dd if=/dev/zero of=/tmp/ramdisk.img bs=1024 count=4000

     2.2 用mke2fs命令来创建一个使用这个空文件的ext2文件系统

              sbin/mke2fs -F -m 0 -b 1024 /tmp/ramdisk.img 40000

     2.3 以loop设备的形式挂载这个文件到/mnt/initrd

              mount  -o loop  /tmp/ramdisk.img /mnt/initrd

3、文件系统的内容

      3.1 创建一些必须的目录     

        mkdir /mnt/initrd/bin

       mkdir /mnt/initrd/sys

       mkdir /mnt/initrd/dev

       mkdir /mnt/initrd/proc  

       mkdir /mnt/initrd/etc

      3.2 创建一些设备文件,直接从redhat拷,注意用 -a 保持所有属性 

                cp -a /dev/console /mnt/initrd/dev

                cp -a /dev/ramdisk /mnt/initrd/dev 

               cp -a /dev/ram0 /mnt/initrd/dev

               cp -a /dev/null /mnt/initrd/dev

              cp -a /dev/tty1 /mnt/initrd/dev 

              cp -a /dev/tty2 /mnt/initrd/dev

     3.3 拷贝busybox 到bin先,建立一些符号连接,注意配置busybox时要选init  ,这里就详细说busybox了。

             cp $busybox_path/busybox ./mnt/initrd/bin

             ln -s busybox ash     

             ln -s busybox mount

             ln -s busybox echo

              ln -s busybox ls 

             ln -s busybox cat 

              ln -s busybox ps

              ln -s busybox init   (初时话程序)

         3.4 建立 etc/init.d/rcS 文件,这是 busybox 默认的 init

                   cat >> /mnt/initrd/etc/init.d/rcS 内容为:                       

                           echo

                           echo "hello alex :)"

                           echo

                  更改权限

                          chmod o+x rcS   

                 在/mnt/initrd 下建立一个到rcS的连接 linuxrc

                       ln -s etc/init.d/rcS linuxrc

          3.5 完成

                      umount /mnt/initrd

                     gzip -9 initrd.img

4、建立iso

        4.1 把 initrd.img.gz 拷贝至 iso 制作目录

        4.2 修改 loadlin 参数

                   loadlin vmlinuz initrd=initrd.img.gz root=/dev/ramdisk

5、搞定,贴张图show一下

很有成就感的说:P

后记

      关于文件系统,可以有很多办法,用busybox 的 make all install 也可以生成。但要能构造一个能用的linux,还有很多路要走,下面还要想办法把文件系统放到VM的虚拟磁盘上、引导程序(lilo、grub)、驱动、gui等等,都能试试。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:45917次
    • 积分:628
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:8篇
    • 译文:0篇
    • 评论:4条
    文章分类