Initramfs的制作和移植

本文介绍如何为嵌入式Linux系统构建initramfs文件系统,包括配置内核支持、修改根文件系统及使用U-boot进行引导的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的开发相关数据

———————————————————————————————————————

机操作系统:Centos 6.7
交叉编译器环境:arm-linux-gcc-4.5.4 
交叉编译器:buildroot-2012.08
开发板平台: FL2440 
Linux内核版本: linux-3.0 
调试终端:SECURE-CRT
Bootloader:U-boot-2010.09
邮箱:hongfuhaocomon@163.com

———————————————————————————————————————

1.了解initramfs文件系统

initramfs在编译内核的同时被编译并与内核生成一个映像文件,可以压缩也可以不压缩,但是目前只支持cpio包格式。它是根文件系统制作和制作的一种非常简单的方法,也可以通过执行这个文件系统中的程序引导真正的文件系统,这样加载根文件系统的工作就不是内核的工作,而是initramfs的工作。由于initramfs使用cpio包格式,所以很容易将一个单一的文件、目录、node编译链接到系统中去,这样很简单的系统中使用起来很方便,不需要另外挂接文件系统。

2.对根文件系统进行修改

[hongfuhao@vboxcentos6 rootfs]$ ln -s bin/busybox init

[lingyun@localhost rootfs]$ ll

total 60

drwxr-xr-x 2 lingyun trainning 4096 Apr 25 20:15 apps

drwxr-xr-x 2 lingyun trainning 4096 Apr 26 15:16 bin

drwxr-xr-x 2 lingyun trainning 4096 Apr 25 20:15 data

drwxr-xr-x 2 lingyun trainning 4096 Apr 25 20:51 dev

drwxr-xr-x 4 lingyun trainning 4096 Apr 26 14:16 etc

drwxr-xr-x 2 lingyun trainning 4096 Apr 25 20:15 info

lrwxrwxrwx 1 lingyun trainning   11 Apr 27 21:19 init -> bin/busybox

drwxr-xr-x 3 lingyun trainning 4096 Apr 25 21:17 lib

lrwxrwxrwx 1 root    root        11 Apr 26 15:16 linuxrc -> bin/busybox

drwxr-xr-x 6 lingyun trainning 4096 Apr 25 20:15 mnt

drwxr-xr-x 2 lingyun trainning 4096 Apr 25 20:15 proc

drwxr-xr-x 2 lingyun trainning 4096 Apr 25 20:15 root

drwxr-xr-x 2 lingyun trainning 4096 Apr 26 15:16 sbin

drwxr-xr-x 2 lingyun trainning 4096 Apr 25 20:15 sys

drwxr-xr-x 2 lingyun trainning 4096 Apr 25 20:15 tmp

drwxr-xr-x 6 lingyun trainning 4096 Apr 25 20:15 usr

drwxr-xr-x 2 lingyun trainning 4096 Apr 25 20:57 var

3. 添加内核对initramfs的支持

[hongfuhao@centos6 kernel]$ ls

linux-3.0  linux-3.0.tar.bz2

[hongfuhao@centos6 kernel]$ cd linux-3.0

 

[hongfuhao@centos6 linux-3.0]$ export TERM=vt100

[hongfuhao@centos6 linux-3.0]$ make menuconfig

。 。 。 。 。 。

General setup  --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
(/home/hongfuhao/fl2440/rootfs/rootfs) Initramfs source file(s)   #输入根文件系统的所在目录 

 。 。 。 。 。

 

[hongfuhao@centos6 linux-3.0]$ ls

 

arch           fs       linuxrom-s3c2440.bin  README          usr

block          include  MAINTAINERS           REPORTING-BUGS  virt

COPYING        init     Makefile              samples         vmlinux

CREDITS        ipc      mm                    scripts         vmlinux.o

crypto         Kbuild   modules.builtin       security

Documentation  Kconfig  modules.order         sound

drivers        kernel   Module.symvers        System.map

firmware       lib      net                   tools

[hongfuhao@centos6 linux-3.0]$ du -h  linuxrom-s3c2440.bin

6.8M    linuxrom-s3c2440.bin

4.制作映像文件

因为文件系统和内核是集成在一起的,所以不需要制作文件系统映像

5.添加ubootinitramfs支持

U-Boot 2010.09 (Jul 15 2016 - 21:57:32)


DRAM:  64 MiB
NAND:  256 MiB
In:    serial
Out:   serial
Err:   serial
Net:   dm9000
Hit any key to stop autoboot:  0 

[fl2440@lingyun]#  set bkr 'tftp 30008000 linuxrom-s3c2440.bin;nand erase 100000 8000000;nand write 30008000 100000 800000'
[fl2440@lingyun]# set bootcmd_initramdisk 'nand read 30008000 100000 800000;bootm 30008000'
[fl2440@lingyun]# set bootargs 'console=ttyS0,115200 mem=64M init=/linuxrc rw loglevel=7'
[fl2440@lingyun]#  set bootcmd 'run bootcmd_initramdisk'
[fl2440@lingyun]# save
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x60000 -- 100% complete.
Writing to Nand... done

[fl2440@lingyun]# run bkr
dm9000 i/o: 0x20000300, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
could not establish link
Using dm9000 device
TFTP from server 192.168.1.2; our IP address is 192.168.1.168
Filename 'linuxrom-s3c2440.bin'.
Load address: 0x30008000
Loading: T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T 
Retry count exceeded; starting again
dm9000 i/o: 0x20000300, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
could not establish link
Using dm9000 device
TFTP from server 192.168.1.2; our IP address is 192.168.1.168
Filename 'linuxrom-s3c2440.bin'.
Load address: 0x30008000
Loading: T T T T T T T T T T T T T T #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ##
done
Bytes transferred = 4797912 (4935d8 hex)


NAND erase: device 0 offset 0x100000, size 0x8000000
Skipping bad block at  0x00700000                                          
Skipping bad block at  0x053a0000                                          
Erasing at 0x80e0000 -- 100% complete.
OK


NAND write: device 0 offset 0x100000, size 0x800000
Skip bad block 0x00700000
 8388608 bytes written: OK

6. 启动引导

[fl2440@lingyun]# boot

启动过程省略。。。。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

煮雨小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值