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

原创 2007年09月26日 14:18:00

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

先大概说一下过程:原先想根据网上一些文章的内容,直接构建一个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等等,都能试试。

相关文章推荐

【嵌入式Linux学习七步曲之第三篇 Linux系统bootlaoder移植】U-BOOT全线移植分析系列之二--U-boot基础

U-BOOT全线移植分析系列之二 ――U-boot基础 Sailor_forever  sailing_9806@163.com转载请注明 http://blog.csdn.net/sailo...

构建嵌入式linux系统 、制作根文件系统

主要命令:    准备工具     tar xf crosstoll-0.43.tar.gz     sudo chmod a+w /opt   //  注意文件的可读写性     sudo ...

【嵌入式Linux学习七步曲之第三篇 Linux系统bootlaoder移植】U-BOOT全线移植分析系列之三--U-BOOT在AT91RM9200上的移植

U-BOOT全线移植分析系列之三 ――U-BOOT在AT91RM9200上的移植   Sailor_forever  sailing_9806@163.com转载请注明 http://blo...

【嵌入式Linux学习七步曲之第三篇 Linux系统bootlaoder移植】U-BOOT全线移植分析系列之一--BOOTLOADER介绍

U-BOOT全线移植分析系列之一 ――――BOOTLOADER介绍 Sailor_forever  sailing_9806@163.com转载请注明 http://blog.csdn.net...

关于嵌入式Linux系统flash分区设计及文件系统格式选择的一些浅见

转自:http://blog.csdn.net/wuquan_1230/article/details/7985817 嵌入式系统应用程序升级是比较频繁的,这就需要将flash进行合理的划分,一...
  • adazone
  • adazone
  • 2015年04月15日 22:17
  • 704

关于嵌入式Linux系统flash分区设计及文件系统格式选择的一些浅见

嵌入式系统应用程序升级是比较频繁的,这就需要将flash进行合理的划分,一般情况,flash 的基本分区都有这几部分: 1.uboot分区 2.kernel分区 3.rootfs分区 这三部分...

嵌入式linux开发学习笔记之运用BusyBox构建根文件系统

首先在讲解如果运用BusyBox构建根文件系统
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VM上学习嵌入式Linux系统的构建之二--内存文件系统
举报原因:
原因补充:

(最多只允许输入30个字)