本文共 1779 字,大约阅读时间需要 5 分钟。
今天可以说是很开心的一天,因为我终于完成了从基础内核到 ARM 嵌入式内核的学习和移植工作,加上自己制作的 Uboot 和根文件系统,充满了成就感。从发表ARM_Linux项目拉力正式开始的一周内,我完成了一个不错的开始。我使用的开发环境是VMware 虚拟机 Ubuntu10.10,飞凌OK6410开发板,最终移植的内核为Linux-2.6.34.11。板子实现了启动Uboot,加载内核,挂载NFS 主机上的根文件系统,并成功测试并加载OK6410 的LED 灯驱动,驱动正常工作。虽然我参考了许多网友的资料,其中包括不少CSDN的博友,但最终我还是按照一篇详细的博文进行操作。
为了参考飞凌提供的Uboot进行自行制作,工作相对简单。飞凌的Uboot是仿照三星 smdk6410 的板子主体来的。而我们用的通用Uboot中有一个配置项:smdk6410_config : uconfig。配置这一项时,Makefile 中的代码是:
@$(MKCONFIG) $(@:_config=) arm s3c64xx smdk6410 samsung s3c6410
如果需要改写板载文件,可以参考百度文库《我的arm_linux移植笔记.pdf》。但如果是飞凌的OK6410或其他 ARM11 开发板,我不建议修改这一项,因为飞凌的Uboot和内核都严格依赖于 smdk6410。另外,注意修改通用的Uboot 中的 include/configs/
目录下的 smdk6410.h
文件,并参考 ./cpu/samsung/smdk6410/start.S
的修改。
根文件系统的构建遵循 FHS 文档。需要创建以下顶层目录:
bin sbin usr proc dev etc lib home mnt tmp var root
每个目录下再细分:
/usr/bin
, /usr/sbin
/etc/init.d
, /etc/rc.d
, /etc/sysconfig
/usr/lib
, /usr/modules
, /usr/sbin
/dev/null
, /dev/console
, /dev/pts
/mnt/etc
, /mnt/jffs2
, /mnt/yaffs
, /mnt/data
, /mnt/temp
创建设备文件:
mknod -m 600 dev/console c 5 1mknod -m 600 dev/null c 1 3
部分目录需要特殊权限:
chmod 1777 tmpchmod 1777 var/tmp
交叉编译Busybox:
CROSS_COMPILE ?= arm-linux- ARCH ?= arm
make menuconfig
并选择必要选项。构建内核时,需注意飞凌内核的硬件配置。在 arch/arm/mach-s3c64xx/mach-smdk6410.c
文件中,寻找分区信息。在 Linux 2.6.28 内核中,这些信息位于 ./arch/arm/plat-s3c/include/plat
目录下,2.6.36 则放在 ./arch/arm/mach-s3c64xx/include
。飞凌统一目录后会增加开发难度,因而我专注于 LED 驱动的添加。
修改内核以支持 LED:
smdk6410_devices[] __initdata = { &s3c_device_i2c0, &s3c_device_i2c1, &s3c_device_fb, ...};
通过详细的思考和尝试,我完成了从零开始的 ARM 嵌入式系统移植工作。这一过程充满挑战,但收获宝贵。我希望这篇文章能为其他移植新手提供参考,并激励更多人参与嵌入式开发。
转载地址:http://zseyk.baihongyu.com/