一.背景

从initrd名称猜测载init的ramdisk

如果使用inird作用什么呢?

举例场景

linux加载执行用户的init进程读init访问硬盘(flash),知道linux设备驱动模块形式启动载ko文件如果 的init读取正常读取硬盘文件系统由于linux内核硬盘系统类型内核模块形式时候linux内核硬盘驱动 文件系统 直接读取init,initrd加载硬盘文件系统 模块读取init.

 

1.包含硬盘驱动文件系统要initrd直接加载用户态init

2.内核包含硬盘驱动 或者文件系统模块形式于initrdinitrd,加载驱动文件系统 模块加载用户态init

知道镜像硬盘驱动文件系统驱动硬盘文件系统模块的initrd用户态init什么包含硬盘驱动文件系统 驱动呢?答案如果内核硬件完全驱动内核initrd.镜像保证设备保持兼容臃肿硬盘文件系统驱动在initrd根据不硬盘文件系统制作的initrd, 内核重复编译

 

二.创建Linux initrd的 流程:

1、格式化一个Ramdisk;

2、加载文件系统内容到Ramdisk;

3、将Ramdisk作为根文件系统。

 

Linux初始RAM磁盘(initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然后再这个initrd RAM磁盘卸载,并释放内存。在很多嵌入式Linux系统中,initrd就是最终的根文件系统

 

 

三.配置Linux内核

1)Initial RAM filesystem and RAM disk (initramfs/initrd) support

使内核支持以ramdisk文件系统作为根文件系统启动。

从menuconfig下图所在位置配置,或者直接在配置文件添加CONFIG_BLK_DEV_INITRD=y

2)RAM block device support

使内核支持虚拟块设备节点,选中这个,/dev/目录下才会出现ramX的虚设块设备节点,,才能将这个节点作为根文件系统挂载。

从menuconfig下图所在位置配置,或者直接在配置文件添加CONFIG_BLK_DEV_RAM=y

3)Default RAM disk size (kbytes)

ramdisk默认大小,这个大小应该适配你制作的ramdisk的大小。

从menuconfig下图所在位置配置,或者直接在配置文件添加CONFIG_BLK_DEV_RAM_SIZE=4096

4)Second extended fs support(可选)

从menuconfig下图所在位置配置,或者直接在配置文件添加CONFIG_EXT2_FS=y

 

四.制作initrd

在ohos的initrd启动配置文件在/productdefine/common/deivce/名.json使能enable_ramdisk.

以RK3568

{

    "device_name": "名称",

    "device_company": "芯片",

    "target_os": "ohos",

    "target_cpu": "arm",

    "kernel_version": "",

    "device_build_path": "device/board/设备/名称",

    "enable_ramdisk": true,   //是否支持ramdisk二级启动

    "build_selinux": true    // 是否支持selinux权限管理

}

 

productdefine/common/products/名称.json

{

  "product_name": "名称",

  "product_company" : "设备",

  "product_device": "名称",

  "version": "2.0",

  "type": "standard",

  "parts":{

    "ace:ace_engine_standard":{},

    "ace:napi":{},

    ...

    "xts:phone_tests":{}

  }

}

 

./build.sh —product-name 

编译out/名称/package/phone/images 目录现ramdisk.img

ohoh的init读取.cfg文件硬件服务进程hap孵化进程,修改设置配置信息

 

五.如果内核,initrd文件

/mkbootimg --kernel zImage --ramdisk ramdisk.img --cmdline "console=ttyS0,115200n8 " -o boot.img

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐