本文转载于

websurf的BLOG(VC知识库)

1、 创建一个全新的根文件系统
        你可以用mkinitrd来创建,这里介绍另外一种方式,用dd命令:
                      # mkdir -p /mnt/initrd    创建一个设备点,用于临时挂载根文件系统。
                      # cd  /tmp               在tmp下创建根文件系统
              # dd if=/dev/zero of=/tmp/initrd bs=512 count=40960      创建一个名为initrd的根文件
                                                           系统,系统每个块的大小为
                                                                                                       512字节,共40960块。
             # mke2fs -F -m 0 initrd       格式化根文件系统,其中-F表示强制执行;
                                                             -m 0表示不为系统预留空间。
             # mount -o loop /tmp/initrd /mnt/initrd         挂载根文件系统,记住这里要使用
                                                                                     -o loop选项,否则挂载会失败。
                      # cd /mnt/initrd     
  
        2、 创建基本的目录结构
                     # mkdir dev proc etc etc/rc.d  sbin bin lib mnt tmp var usr  
                     # chmod 755 dev etc etc/rc.d  sbin bin lib mnt tmp var usr  
                     # chmod 555 proc

3、 添加设备

你可以使用mknod创建,也可以从现有的系统中拷贝过来,拷贝的时候一定要注意,最好使用-dfR,这样有两个好处:1、拷贝路径下的所有文件,如果有文件夹,则嵌套拷贝整个文件夹下的内容;2、保持文件(设备)的属性不变。

这里采用mknod创建的方式,以下设备是必须的console、kmem、mem、null、ram0、tty等。
                    建立一般终端机设备
                            # mknod tty c 5 0
                            # mkdir console c 5 1
                            # chmod 666 tty console

建立 VGA Display 虚拟终端机设备
                           # mknod tty1 c 4 0
                           # chmod 666 tty0

建立 RAM disk 设备
                          # mknod ram0 b 1 0
                          # chmod 600 ram0

建立 null 设备
                         # mknod null c 1 3
                         # chmod 666 null

4、 创建配置文件
         到这里我们就有了一个初步的小型根文件系统,但是还需要配置一些有关的 shell script来完善它。
      在etc下创建最基本的配置文件fstab、inittab、rc.d/rc.sysinit,其中每个配置文件中至少应该包含以下
      对应的内容:
                fstab应包括:
            /proc  /proc  proc  defaults 0 0

inittab应包括:
                    ::sysinit:/etc/rc.d/rc.sysinit
                    ::sysinit:/bin/sh  (注意,这里如果用getty或minigetty代替sh,那么shell就会等待用户登录,
                           而不会直接进入shell。)
               rc.d/rc.sysinit应包括:
                    /bin/mount  –a

5、 添加bin、sbin、usr/bin、usr/sbin下的可执行文件   
        系统至少应该包含工具sh, ls, cp, mv,init。我们可以将/bin /sbin /usr/bin /usr/sbin
    下的对应工具拷贝过来,拷贝的时候采用cp  –dfR。系统中的可执行文件一般都比较大,
     在内存或磁盘空间紧张的情况下不适合,我们可以用BusyBox来解决这个问题。BusyBox 包含了
     七十多种 Linux 上标准的工具程序,仅需要几百 k 磁盘空间,在嵌入式系统上常用到它。下载了
     BusyBox的源代码包后可以按照如下的步骤操作:
                DOSTATIC=true
     然后修改 BusyBox 中的 init.c,设定系统要执行的第一个程序为: /etc/rc.d/rc.sysinit
                #define INIT_SRCIPT "/etc/rc.d/rc.sysinit" 
     开始编译BusyBox
               #make
               #make install 
    到这一步我们就得到了可执行命令busybox
       将busybox 复制到/mnt/initrd/bin目录下
              # cp busybox  /mnt/initrd/bin 
    然后创建常用命令的link,具体的工作原理请参阅busybox的官方说明。
   我们可以使用 ./busybox --help 来查看busybox中都有哪些工具。常用的工具及busybox
   的用法如下:
               # ln -s busybox  ls
              # ln -s busybox  cp
              # ln -s busybox  mount
             # ln -s busybox  umount
             # ln -s busybox  more
            # ln -s busybox  ps
            # ln -s busybox  sh
      现在我们就有了所需的常用命令。
       
        6、 添加库到lib下
         该目录中包含有你的启动盘启动过程中所需要的共享函数库,如果缺少必须的函数库,
     系统会停止启动或出现一大堆错误信息,所以一定要注意。
        几乎所有的程序都需要libc库,列一下目录/lib中的libc:
   ls  -l  /lib/libc*
  -rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so*
  lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 -> libc-2.1.1.so*
  libc.so.6的6表示版本号,它指向的文件才是你真正需要的。
        查看/bin  /sbin  /usr/bin  /sur/sbin下每一个程序使用的函数库,用命令ldd,
    如:
      ldd  /sbin/mke2fs
       libext2fs.so.2 => /lib/libext2fs.so.2 (0x40014000)
      libcom_err.so.2 => /lib/libcom_err.so.2 (0x40026000)
      libuuid.so.1 => /lib/libuuid.so.1 (0x40028000)
      libc.so.6 => /lib/libc.so.6 (0x4002c000)
      /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
    输出右边的库都是必须的,有的可能是链接文件。
      在/lib目录下你还必须有函数库装载器,这个装载器或是ld.so (对 a.out 库) 或是   
        ld-linux.so (对 ELF 库)。新版本的ldd一般会告诉你所需库的装载器。
        7、 加载模块
        如果你有一个模块化的内核,你还得考虑需要加载的模块,它们都位于/lib/modules 下
                        cp –dfR  /lib/modules/x.y.z  /mnt/initrd/lib/modules
       8、 打包
             # cd /tmp
        # umount /mnt/initrd
        # gzip -9  initrd
     最终产生的文件initrd.gz就是压缩过的根文件系统
        9、 修改已经存在的根文件系统
                   # gunzip initrd.zip
                   # mount -o loop /tmp/initrd /mnt/initrd
                  # 用户修改根文件系统
                  # umount /mnt/initrd
                  # gzip -9  initrd

根文件系统定制【ZT】相关推荐

  1. linux 文件系统覆盖目录,Linux内核裁减及根文件系统定制

    一.内核编译 1.准备工作 (1)整理出系统需要支持的硬件.文件系统类型以及网络协议等内容. (2)建议用命令uname –r 查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/ ...

  2. 定制适用于ARM平台的Ubuntu rootfs(根文件系统)

    0 背景 有一个很厉害的师兄针对我们实验室的需求设计了一块控制板,以beaglebone为基础,由于更改了一些底层的硬件,所以重新定制编译的内核,并预先烧写到了板子的flash中.现在需要安装ubun ...

  3. linux 内核移植和根文件系统的制作【转载】

    原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...

  4. 用busybox制作并配置根文件系统

    http://blog.chinaunix.net/uid-26758020-id-3208951.html ============================================= ...

  5. RK3308(5)---编译根文件系统

    编译根文件系统 准备工作 开发环境搭建 除了系统要求外,还有其他软硬方面的要求. 64 位系统 硬盘空间大于 40G,如果您进行多个构建,将需要更大的硬盘空间. 推荐使用Ubuntu 16.04 的系 ...

  6. 移植ubuntu14.04根文件系统至beaglebone开发板探索

    移植ubuntu14.04根文件系统至BeagleBone开发板探索 移植背景 我是一个linux小白,然而由于项目需要,一个师兄为机器人的控制定制了一个开发板,基于beaglebone.由于此开发板 ...

  7. Linux 根文件系统目录结构与功能,4.Linux根文件系统和目录结构及bash特性

    4.1Linux目录结构和根文件系统全面讲解 Linux文件系统: Linux:glibc 程序编译方式: 动态链接 静态编译 进程的类型: 终端:硬件设备, 关联一个用户接口 与终端相关:通过终端启 ...

  8. buildroot构建根文件系统

    buildroot构建根文件系统 一.简介 Buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.本文使 ...

  9. Linux系统rootfs切换到真正的根文件系统详细源码解析(附工作项目手动制作根文件实例)

    目录 一.简介 二.设计过程总结 2.1 busybox制作精简的文件系统并完成ramfs启动 2.2 通过精简的文件系统制作完整的文件系统并拷贝到硬盘 2.3 rootfs切换到真正的根文件配置 2 ...

最新文章

  1. android 在同一activity切换layout,在 Android Studio 添加一个activity并实现跳转
  2. 征服数据科学面试的10个小技巧(附资源)
  3. iOS事件机制(一)
  4. How to Create a Development Package ?
  5. How does model reference pass from app view to master view
  6. 2-修改软件源让pip下载更快
  7. 【渝粤题库】陕西师范大学164212 国际贸易实务 作业(专升本)
  8. 在java中柱状图代码_我在java中编写了个柱状图,可运行了,我想让柱状图在JSP页面中显示,请问有什么方法么?谢谢。...
  9. jqgrid ajax加载数据,如何通过ajax在jqgrid中加载数据(json)?
  10. 为什么年轻人挣得很多还是穷?北上广深挑战指数报告~
  11. 中学生计算机编程教学视频6,计算机科学速成课6:寄存器和内存【视频】
  12. mysql汽车品牌系列_爬取汽车之家汽车品牌型号系列数据
  13. 密探查询系统服务器码,车辆国几排放查询
  14. 「网络流 24 题」餐巾计划 【网络流】
  15. Spark on Hive Hive on Spark傻傻分不清?
  16. 【漆天编程】MT4和MT5有什么区别?这是我见到过的最好的回答
  17. VMware安装及配置静态Ip、域名、免密(centos7)
  18. Mathmatic 函数表
  19. Django项目连接MongoDB的三种方法
  20. linux中一些好玩的程序安装

热门文章

  1. IOT---(6)Android Things 开发环境搭建
  2. 教育|教授因被指控“奴役”博士生遭学校解雇,反手将学校告上法庭并获赔偿......
  3. Python分析pdf简历
  4. 【Python数据挖掘课程笔记】八.关联规则挖掘及Apriori实现购物推荐
  5. 小米一元流量magisk_小米推出5G定制电话卡,资费月49元起,成最便宜5G手机套餐!...
  6. 一台比亚迪秦EV充电时自燃 相关人员:无人员伤亡、起火未爆炸
  7. 天猫双11菜鸟物流绿色减碳1.8万吨 120万人参与快递箱回收
  8. 心玮医疗发布75万股权回购计划 用于招揽和激励员工等
  9. 超火AI变脸特效来袭!马云蔡徐坤一起《吗咿呀嘿》 网友:摇不能停
  10. 3月12日见!红魔5G游戏手机正式官宣:全球首款144Hz游戏手机