• 为linux建立最小的根文件系统


    在编译内核时候,可以指定一个文件夹作为内核启动时候的根文件系统,linux中管这个文件系统叫做initramfs。

    具体做法如下(以i386为例)

    1.下载内核文件

      wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2

    2.解压内核

       bzip2 -d linux-2.6.26.tar.bz2  生成一个linux-2.6.26.tar文件,然后

       tar xvf linux-2.6.26.tar 

       解压后,将有个linux-2.6.26文件夹存在

    3.准备一个iniramfs文件系统的文件夹

      在linux-2.6.26文件夹下建立一个文件夹 myinitramfs

       写一个测试用的hello world,起名为hello.c,如下:

      #include <stdio.h>

      #include <unistd.h>

      int main(int argc,char *argv[])

      {

         int i = 0;

         while (1) {

          printf("hello world (%d)\n",i);

         }

        return 0;

       }

      编译  gcc -static -o init hello.c

      把init拷贝到myinitramfs文件夹下。

      cp init myinitramfs/

      由于需要显示文字,还需要在文件夹下准备console设备文件。

      mkdir myinitramfs/dev

      cp -a /dev/console myinitramfs/

    4.编译内核

       在linux-2.6.26文件下下,执行make help。

       将看到很多帮助信息,其中有一项是 i386_defconfig

       执行 make i386_defconfig,将生成一个.config文件。

       为了把之前准备好的文件夹添加到内核配置文件中,还需要重新配置下config文件

       make config

        在 General Setup --->

        Initial RAM filesystem and RAM disk (initramfs/initrd) support (BLK_DEV_INITRD) [Y/n/?]

         Initramfs source file(s) (INITRAMFS_SOURCE) [myinitramfs]

       处,输入准备好的文件夹.

        配置好后,在.config文件中会有如下一条定义

       CONFIG_INITRAMFS_SOURCE="myinitramfs"

       保存.config

       make 编译内核

    5.用qemu测试内核和initramfs

       qemu -kernel  linux-2.6.26/arch/i386/boot/bzImage  -initrd linux-2.6.26/usr/initramfs_data.cpio.gz  /dev/zero

       initramfs_data.cpio.gz 这个文件是内核自动生成的,具体名字可能不同的系统或者内核有差异,但是后缀应该是.cpio.gz

  • 相关阅读:
    Unity打包ARCore项目失败,但是其他安卓项目成功
    关于Unity 图片队列存储以及出列导致内存溢出的解决方案
    unity 使用 outline 组件
    7Z解压工具的BUG
    Unity ILRuntime 调用方法一览
    Python 免费插件
    SQL经典面试题及答案
    PL/SQL Developer中文注释乱码的解决办法
    Tomcat并发优化和缓存优化
    在配置hibernate.cfg.xml时需指定使用数据库的方言:
  • 原文地址:https://www.cnblogs.com/top5/p/1630073.html
Copyright © 2020-2023  润新知