究了四天linux内核移植和文件系统制作,总算移植成功,在这里和大家分享一下,我是一个初学者,有不对的地方,请大家指点。
一,准备工作
1,内核版本:2.6.30.10
busybox 1.13.0
编译器:arm-linux-3.4.1
文件系统:yaffs2
平台:mini2440
2,移植linux
1)Linux 2.6.30.10的下载地址:
http://www.kernel.org/
2)yaffs2文件系统的下载地址:
http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/
点击Download GNU tarball,下载cvs-root.tar.gz
3)busybox的下载地址:
http://www.linuxidc.com/Linux/2011-02/32615.htm
我用的是busybox-1.13.0.tar.bz2
4)下载mkyaffs2image
http://www.linuxidc.net/thread-2226-1-1.html
二、移植内核
1,解压内核源码包
# tar jxvf linux-2.6.30.10.tar.bz2 -C /opt/FriendlyARM/mini2440/
2,进入内核目录
# cd /opt/FriendlyARM/mini2440/linux-2.6.30.10
3,修改顶层Makefile
# gedit Makefile
在193行
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
修改为
ARCH ?=arm
CROSS_COMPILE ?=arm-linux-
4,修改机器码
# gedit arch/arm/tools/mach-types
在379行
s3c2440 ARCH_S3C2440 S3C2440 362
修改为
s3c2440 ARCH_S3C2440 S3C2440 782
与supervivi传入的机器码参数一致即可!
5,修改时钟频率
# gedit arch/arm/mach-s3c2440/mach-smdk2440.c
在160行
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
//s3c24xx_init_clocks(16934400); //注释这句,加入下一句
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
6,修改Nand Flash分区
# gedit arch/arm/plat-s3c24xx/common-smdk.c
在109行
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = 'supervivi',
.size = 0x00030000,
.offset = 0,
},
[1] = {
.name = 'Kernel',
.offset = 0x00050000,
.size = 0x00200000,
},
[2] = {
.name = 'root',
.offset = 0x00250000,
.size = 0x03dac000,
}
};
7,加入对yaffs2文件系统的支持
1,解压yaffs2文件系统源码包
# tar zxvf cvs-root.tar.gz -C /opt/FriendlyARM/mini2440/
2,进入yaffs2源码目录
# cd /opt/FriendlyARM/mini2440/cvs/yaffs2
3,打补丁
# ./patch-ker.sh c ../../linux-2.6.30.10
Updating ../../linux-2.6.30.10/fs/Kconfig
Updating ../../linux-2.6.30.10/fs/Makefile
8,配置内核
# cp arch/arm/configs/s3c2410_defconfig .config
# make menuconfig
1,机器类型只选以下三项:
System Type ---> S3C2410 Machines ---> [*] SMDK2410/A9M2410
S3C2440 Machines ---> [*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module
2,我用得编译器是3.4.1没有配置Kernel Feature
3,File systems ---> [*] Miscellaneous filesystems ---> <*> YAFFS2 file system support
4,Boot options-
noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
9,重新编译内核
# make zImage
注意:如果是重新编译内核需要遵守以下步骤:
1、make dep
make dep的意思就是说:如果你使用程序A(比如支持特殊设备),而A需用到B(比如B是A的一 个模块/子程序)。而你在做 make config的时候将一个设备的驱动 由内核支持改为module,或取消支持,这将可能影响到B的一个参数的设置,需重新编译B,重新编译或连接A....如果程序数量非常多, 你是很难手工完全做好此工作的。make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要编译。所以,你要make dep。
2、make clean
清除一些以前留下的文件,比如以前编译生成的目标文件,这一步必须要进行。否则,即使内核配置改动过,编译内核时还是将原来生成的目标文件进行连接,而不生成改动后的文件。
3、make zImage
Linux内核有两种映像:一种是非压缩内核,叫 Image,另一种是它的压缩版本,叫zImage。根据内核映像的不同,Linux内核的启动在开始阶段也有所不同。zImage是Image经过压缩形成的,所以它的大小比 Image小。但为了能使用zImage,必须在它的开头加上解压缩的代码,将 zImage解压缩之后才能执行,因此它的执行速度比Image要慢。但考虑到嵌入式系统的存储空容量一般比较小,采用zImage可以占用较少的存储空间,因此牺牲一点性能上的代价也是值得的,所以一般的嵌入式系统均采用压缩内核的方式。
编译完成后,会在内核目录arch/arm/boot/下生成zImage内核映像文件。
上一篇:mini2440 实现u-boot的usb slave下载功能
下一篇:成功移植DHCP客户端到mini2440
推荐阅读最新更新时间:2026-03-20 16:47
- ADR435B 5 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力
- 使用 Analog Devices 的 ADP8140 的参考设计
- NCP699SN30T1G 150mA、3 路输出电压 CMOS 低 Iq LDO 的典型应用,在 TSOP-5 中启用
- ZTL431过压/欠压保护电路典型应用
- 使用 Microchip Technology 的 DVR2802B3 的参考设计
- 开源的浮游生物监测分析设备PlanktoScope
- STK503,旨在评估 AT90USB AVR MCU 的入门套件,通过 AVR Studio 支持 JTAGICE mkII 和 AVRISP mkII
- 使用 BittWare 的 XCVU190 的参考设计
- 远程声控参考设计
- NCP4354AADAPGEVB,用于 NCP4354、65W 适配器关闭模式控制器的评估板

DS1000Z数字示波器中文使用说明
【Follow me 第三季第四期】PSoC6 任务代码
英飞凌PSoC 6 电位器控制LED闪烁状态并水墨屏显示——源码
现代雷达系统的信号设计
BFR340T






京公网安备 11010802033920号