内核ramdisk启动之根文件系统制作

内核ramdisk启动之根文件系统制作

文章基于海思 hi3519av100 平台, 仅供参考。

涉及方面:

  • uboot : 这里uboot需要传递启动命令行参数
  • kernel : 这里要修改启动方式为ramdisk启动
  • rootfs : 这里要制作目标

其中第一个uboot启动参数要与kernel的配置、rootfs的大小要保持一致。

uboot 修改启动参数

当前:

bootargs='mem=256M console=ttyAMA0,115200 clk_ignore_unused root=/dev/ram0 rw init=/linuxrc initrd=0x24000000,0x800000'

这里root=/dev/ram0 rw init=/linuxrc initrd=0x24000000,0x800000是必要的参数,/dev/ram0需要在内核开启ramdisk的块设备选项,init=/linuxrc是启动选项,initrd=0x24000000,0x800000ramdisk在内存中的位置,长度。这个0x800000需要和kernel的配置一致,且生成的ramdisk也是这个大小。

setenv bootargs 'mem=256M console=ttyAMA0,115200 clk_ignore_unused root=/dev/ram0 rw init=/linuxrc initrd=0x24000000,0x800000'
savenv

kernel 修改配置文件

配置路径为:> Device Drivers > Block devices
这里配置的RAM disks的数量是8,可以更少,ramdisk镜像的大小是8192,单位是KB,即8MB的大小。
配置如图所示:
在这里插入图片描述

紧接着编译内核:

make ARCH=arm CROSS_COMPILE=arm-himix200-linux- uImage -j16

rootfs 制作

编译busybox

这里暂时没有做修改,先用默认配置进行编译:

cp config_arm_himix200_a53_softfp_neon .config
make -j16 && make install

make install之后,在当前目录生成了_install文件夹。

拷贝相关工具和库

这里先将刚刚生成的busybox的工具拷贝过来:

mkdir mroot
cd mroot/
cp -R ../../busybox-1.26.2/_install/* ./

lib.tgz解压后拷贝到刚刚创建的mroot

tar -xzvf lib.tgz 
mv lib mroot/

lib.tgz来自SDK的工具链里:arm-himix200-linux/runtime_glibc.tgz/runtime_glibc.tar/runtime_glibc/a53_softfp_neon-vfpv4/,选这个运行库需要和前面的busybox参数对应a53_softfp_neon

这里要strip一下,否则库占用空间会比较大:

cd mroot/lib/
arm-himix200-linux-strip *

这里需要的一些配置文件直接从SDK包里取了:(主要是/etc目录下的文件)
SDK/Hi3519AV100_SDK_V2.0.2.0/package/osdrv/rootfs_scripts/rootfs

接下来要到虚拟机里面制作ramdisk镜像。

压缩这个临时文件系统:

tar -czf mroot.tgz mroot/ 

放到虚拟机后,解压后创建/dev下的某些设备,增加权限等:

tar -xzvf mroot.tgz
cd mroot/
cd dev/
sudo mknod -m 666 console c 5 1
sudo mknod -m 666 null c 1 3

cd -
sudo chown root -R *
sudo chgrp root -R *
sudo chmod 4755 bin/busybox

创建ramdisk镜像,并拷贝rootfs的内容到里面:

sudo dd if=/dev/zero of=ramdisk bs=1024 count=8192
sudo mke2fs -F -m0 ramdisk  
sudo mount -t ext2 ramdisk /mnt/loop/
cd /mnt/loop/
sudo cp ~/test/mroot/* ./ -afR
cd -
sudo umount loop/

将此时的ramdisk从虚拟机拷贝出来,放到nfs服务器上,准备放到设备上运行,设置好IP等,使用测试命令进行运行:

setenv mj "tftp 0x22000000 uImage;tftp 0x24000000 ramdisk; bootm 0x22000000;"
savenv
run mj

令进行运行:

setenv mj "tftp 0x22000000 uImage;tftp 0x24000000 ramdisk; bootm 0x22000000;"
savenv
run mj

此时已经可以正常启动。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值