MINI2440内核及文件系统的制作和移植

本文详细介绍了如何在MINI2440平台上制作和移植Linux内核以及文件系统。内容涵盖内核配置、文件系统创建、内核映像和ramdisk映像的下载等步骤,包括配置内核支持ramdisk、制作uImage内核镜像、建立基本的根文件系统,并通过u-boot下载内核和ramdisk映像启动系统。

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

 

一.内核的制作

1.首先建立一个工作目录sysbuild,将光盘里面的linux-2.6.32.2-mini2440-20110413.tar.gz解压到工作目录下,然后进入解压好的目录。

2.清除原有配置与中间文件 make mrproper 然后可以再make clean 一下

3.配置内核

#make menuconfig 如果是在Linux终端上面操作的话,要把屏幕拉大一点,不然会出现一个display is too small的错误

打开配置菜单,修改两个配置项,分别是:
a):General setup-->选择 Initial RAM filesystem and RAM disk...... 项
b):Device Drivers-->Block devices-->选择 RAM block device support 项
并检查Optimize for size是否被选中,如果没有则选中,此项优化内核大小,根据需要进行配置。
修改(8192)Default RAM disk size kbytes选项为(4096)Default RAM disk size kbytes,之所以修改是因为我之后制作的ramdisk是4096KB大小的。当然如果你想制作8192KB大小的ramdisk,这里就要对应为8192了,以此类推。但是最小系统嘛,是不用那么大的ramdisk的。此项的默认配置就是(4096),以前我改过这个配置,所以是(8192)了。如果这个大小和你做的ramdisk不匹配,则启动时仍然会出现kernel panic内核恐慌,提示ramdisk格式不正确,挂载不上ramdisk。
然后特别要注意的一点是,ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统时ext2文件系统。所以一定要在make menuconfig ARCH=arm的时候进入File systems菜单,选上<*> Second extended fs support。以提供内核对ext2文件系统的支持。我以前添加过了ext2文件系统了,所以开始的时候在此没有说明,在此为了说明为什么有的人照着我的方法做了,但是仍然kernel panic,特别把这一步也加上。
然后保存配置退出。
这样就为内核添加好了ramdisk启动功能和ramdisk的驱动支持了。

4.修改内核启动参数

方法有二:
a):修改.config的第310行,修改CONFIG_CMDLINE=""的定义
修改为CONFIG_CMDLINE="initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M"
保存。
意思为从ramdisk启动,ramdisk压缩文件起始地址在内存地址0x31000000处,文件大小为0x200000。
此参数也可以在make menuconfig ARCH=arm时进入Boot options菜单,然后在Default kernel command string里修改。效果是一样的。
b):或者不修改.config的的第310行CMDLINE定义,而是用u-boot的bootargs环境变量来传递启动参数。
同样也是修改该环境变量为bootargs=initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M
并saveenv保存u-boot环境变量
以上a),b)的效果是一样的。

5.创建依赖 //编译2.6以后得内核不需要这步

#make dep ARCH=arm CROSS_COMPILE=arm-linux-

6.编译内核

#make zImage 这样就会生成一个内核文件了

*** Kernel: arch/arm/boot/zImage is ready

7.制作uImage内核镜像

由于我使用的Bootloader是u-boot,所以要将zImage转化为uImage,方法如下:
#mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -n "Linux kernel Image" -d zImage uImage-ramdisk
说明:mkimage工具是u-boot格式uImage内核映像制作工具。如果成功编译u-boot之后,它会在u-boot源码树下的tools目录之下。建议将其拷贝到宿主机的/sbin/目录下,以方便使用。

++++如果想使用一个现成的配置文件,例如使用arch/arm/def-configs/sbc2410-nfs ++++
1、Cp arch/arm/def-configs/sbc2410-nfs <linuxDIR>/.config
2、make menuconfig ARCH=arm 并保存

二.文件系统的制作

1.创建根文件系统的目录

#mkdir rootfs

#cd rootfs

#mkdir bin dev etc lib proc sbin sys usr mnt tmp var

#mkdir usr/bin usr/lib usr/sbin lib/modules

2.创建最基本的设备文件

#cd dev
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
#cd ..

3.安装/etc配置文件

#tar etc.tar.gz -C /xxx/rootfs
xxx表示你要制作的rootfs所在的目录

4.安装内核模块

进入Linux内核源码目录(linux-2.6.29)
#make modules ARCH=arm CROSS_COMPILE=arm-linux-

#make modules_install ARCH=arm INSTALL_MOD_PATH=/xxx/rootfs
5.配置busybox

解压busybox进入busybox代码目录
make menuconfig
1. Build Option 选中"Build busybox as a static binary"
2. Build Option 选中"Do you want to build busybox with a cross compiler"

Cross Compiler Prefix (arm-linux-)

3. Installation Options 选中 "Don't use /usr"
Busybox Installation Prefix (/xxx/rootfs)

4.制作ramdisk根文件系统镜像
解压genext2fs-1.4.1.tar.gz

进入目录后安装

#./configure

#make

#make install

#genext2fs -b 4096 -d rootfs ramdisk
-b是指制作的ramdisk大小为4096K字节
-d是指要制作成ramdisk的根文件系统目录
最后的ramdisk是制作出来的ramdisk的名字,当然可以改名了。
#gzip -9 -f ramdisk


三.下载内核映像和ramdisk映像

启动u-boot,暂停u-boot自动启动,在u-boot命令行中键入如下命令下载内核和ramdisk映像:
[u-boot@MINI2440]# tftp 0x32000000 uImage-ramdisk
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.31.117; our IP address is 192.168.31.230
Filename 'uImage-ramdisk'.
Load address: 0x32000000
Loading: T T #################################################################
#################################################################
#
done
Bytes transferred = 1917752 (1d4338 hex)
[u-boot@MINI2440]# tftp 0x31000000 ramdisk.gz
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.31.117; our IP address is 192.168.31.230
Filename 'ramdisk.gz'.
Load address: 0x31000000
Loading: T T #################################################################
####
done
Bytes transferred = 1002594 (f4c62 hex)

在u-boot命令行下键入如下命令启动系统:
bootm 0x32000000
## Booting kernel from Legacy Image at 32000000 ...
Image Name: Linux-2.6.29.4-FriendlyARM
Created: 2010-04-09 15:13:52 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1917688 Bytes = 1.8 MB
Load Address: 30008000
Entry Point: 30008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux.............................................................
................................................................ done, booting t
he kernel.
Linux version 2.6.29.4-FriendlyARM (root@localhost.localdomain) (gcc version 4.3
.2 (Sourcery G++ Lite 2008q3-72) ) #3 Fri Apr 9 23:13:36 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: FriendlyARM Mini2440 development board
Memory policy: ECC disabled, Data cache writeback
……中间过长的内容在此省略了……
RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem) on device 1:0.
Freeing init memory: 136K
eth0: link down

Processing /etc/profile... Done

# eth0: link up, 100Mbps, full-duplex, lpa 0x45E1

至此系统启动成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值