zoukankan      html  css  js  c++  java
  • Linux inird 入门及制作

    LINUX内核自从2.6版以后,就大力推荐CPIO-INITRD.


    现在各大LINUX发行版的INITRD都是CPIO格式的.

    如何制作CPIO-INITRD.

    首先假设咱们已经用BUSYBOX或KLIBC或别的什么做好了根文件系统,位于~/rootfs下.

    按照IBM DEVELOPERWORKS里的文章说,可以用以下命令制作CPIO-INITRD:

    cd ~/rootfs
    find . | cpio -c -o > ../initrd.img
    gzip ../initrd.img

    其实这是不对的.

    我用这几条命令制作CPIO-INITRD,结果都是KERNEL PANIC.

    参照我用的ARCHLINUX发行版的mkinitcpio命令的脚本代码,应该是用gen_init_cpio命令来制作CPIO-INITRD.

    gen_init_cpio命令源码通常与LINUX内核源码一块儿打包,位于内核源码目录的usr/下面.

    编译其源码得到gen_init_cpio可执行文件,这还不够.

    gen_init_cpio的参数是一个文本文件,这个文件的内容类似于这种格式:

    dir /sbin 755 0 0
    slink /sbin/makedevs ../bin/busybox 777 0 0
    slink /sbin/modprobe ../bin/busybox 777 0 0
    slink /sbin/switch_root ../bin/busybox 777 0 0
    slink /sbin/sysctl ../bin/busybox 777 0 0
    slink /sbin/lsmod ../bin/busybox 777 0 0
    slink /sbin/getty ../bin/busybox 777 0 0
    slink /sbin/ifconfig ../bin/busybox 777 0 0
    ......

    很明显,这是个文件列表.

    手工制作这个文件列表是不现实的,usr/目录下还有个gen_initramfs_list.sh,这个脚本就是用来自动生成文件列表的.

    好了,下面咱们就可以得出生成CPIO-INITRD的完整步骤了:

    cd ~
    gen_initramfs_list.sh rootfs/ > filelist
    gen_init_cpio filelist > rootfs.cpio
    gzip rootfs.cpio

    最后得到的这个rootfs.cpio.gz,就是咱们要的CPIO-INITRD了.

    在BOOTLOADER里修改一下参数:

    append initrd=rootfs.cpio.gz ramdisk_size=8192 vga=792

    结果怎么样?

    (全文完)

    ====================================== 

    2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式。
     
    1、解压initrd***.img:
    #cp /boot/initrd-***.img  initrd.img.gz
    #gunzip initrd.img.gz
    #mkdir initrd
    #mv initrd.img initrd
    #cd initrd
    #cpio -ivmd < initrd.img
     
     
    2、修改initrd
    对解压后的initrd文件系统进行相关修改。
     
     
    3、生成新的initrd
    #find . | cpio -o -H newc | gzip > /mnt/sda1/boot/initrd.img-2.6.18-4-686

    (注:-H newc 是必须的,否则内核会认为是ramdisk,而不是initramfs)

    参考链接:

    Linux 初始 RAM 磁盘(initrd)概述

    http://www.ibm.com/developerworks/cn/linux/l-initrd.html
    Linux2.6 内核的 Initrd 机制解析

    http://www.ibm.com/developerworks/cn/linux/l-k26initrd/index.html

  • 相关阅读:
    Spring Boot 的各种start
    Lombok介绍、使用方法和总结
    JS字符串与二进制的相互转化
    java字符串与二进制的相互转化
    DevExpress WPF v18.2新版亮点(六)
    用MyEclipse开发REST Web Service
    .NET界面控件DevExpress发布v18.2.4|附下载
    DevExpress WPF v18.2新版亮点(五)
    「版本升级」MyEclipse CI 2018.12.0正式发布
    MyEclipse使用教程:在Web项目中使用Web片段
  • 原文地址:https://www.cnblogs.com/wqlblogger/p/1772907.html
Copyright © 2011-2022 走看看