应用一斑 王延龙
嵌入式系统移植三步曲
1. Bootloader的移植
2. linux 内核的编译
3. linux根文件系统移植
1.BootLoader的移植,修改Makefile文件内容,将
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
endif
改为
ifeq ($(ARCH),arm)
CROSS_COMPILE=/usr/local/arm/2.95.3/bin/arm-linux-
endif
在
smdk2410_config : unconfig
@./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
后面添加
meng2410_config : unconfig
@./mkconfig $(@:_config=) arm arm920t meng2410 NULL s3c24x0
编辑meng2410.h头文件
[root@localhost u-boot-1.1.4]# gedit include/configs/meng2410.h
编辑board/meng2410/Makefile文件
将
OBJS := smdk2410.o flash.o
改为
OBJS := meng2410.o flash.o
修改cpu/arm920t/config.mk文件
将
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
改成:
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu,))
再修改examples/Makefile文件
将原文件的第58行开始的内容:
SREC = hello_world.srec
BIN = hello_world.bin hello_world
改为
SREC = hello_world.o
BIN = hello_world.o hello_world
即可重新编译。
[root@localhost u-boot-1.1.4]# ll u-boot*
-rwxr-xr-x 1 root root 441785 06-07 09:30 u-boot
-rwxr-xr-x 1 root root 115460 06-07 09:30 u-boot.bin
-rw-r--r-- 1 root root 50542 06-07 09:30 u-boot.map
-rwxr-xr-x 1 root root 346442 06-07 09:30 u-boot.srec
再添加skyeye.conf文件
# skyeye config file for S3C2410X
cpu: arm920t
mach: s3c2410x
# physical memory
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00800000, file=./u-boot.bin ,boot=yes
mem_bank: map=M, type=RW, addr=0x30000000, size=0x00800000
mem_bank: map=M, type=RW, addr=0x30800000, size=0x00800000
mem_bank: map=M, type=RW, addr=0x31000000, size=0x03000000
# all peripherals I/O mapping area
mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
mem_bank: map=I, type=RW, addr=0x19000300, size=0x00000020
net: type=cs8900a, base=0x19000300, size=0x20,int=9, mac=08:00:3E:26:0A:5B, ethmod=tuntap, hostip=10.0.0.1
nandflash: type=s3c2410x,name=K9F1208U0B,dump=./nand.dump
#lcd:type=s3c2410x, mod=gtk
dbct:state=on
执行skyeye1.2.6。
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
MENG2410 #
第二步:编译内核
建立好了开发环境,接下来要做的就是根据硬件环境编译原程序.本试验用的是linux-2.6.14.7.tar.bz2,将其解压之后修改Makefile文件,然后再对网上进行移植,本例用的是cs8900,接着编辑arch/arm/mach-s3c2410/mach-smdk2410.c文件。设置flash分区
第三步:根文件系统的移植 busybox,yaffs2根文件系统的建立,在重启服务器之后再启动开发版。
问题:
一、安装skyeye
这一节安装过程很简单,很快就能按照书上步骤完成。
二、BootLoader的移植
这一节就出现了很多问题,
1、首先到第三步时 复制必要的文件,编辑ok2410.h头文件 做到
[root@localhost u-boot-1.1.4]# mv board/ok2410/smdk2410.c board/ok2410/ok2410.c
竟然找不到对应的文件,这时让我百思不得其解只好从头再做一遍了,结果顺里的就完成了
2、当执行到第十二步
[root@localhost u-boot-1.1.4]# ./mknandflashdump u-boot.bin nand.dump 0
显示没有错误没有mknandflashdump命令,当时就蒙了,不知道需要从别的地方下载,以为它本身自带的就有,所以在从头做了两边之后,意识不是我做得问题了,而是它本身的问题,通过询问同学才知道从别的地方复制一份粘贴进去就行了。
3、第十三部
进一步修改在第十一步修改过的内容时,第一次把13步要添加的内容添加到了11步时增添的模块中了,导致运行无法执行,当我把第13步要添加的内容整体的添加到第十一步添加的内容之后再运行,就一切正常了。
三、linux的移植
1、在第十步配置内核时不知道怎么对弹出的TUI界面内容进行操作,使我无从下手,通过问晓风得到解决。
四、跟文件系统的移植
1、当执行到第六步编译
将networking/interface.c文件的818行修改为“.type=-1",让后再次编译,这时就一直出错,耽但无任何错误提示,所以我意识到可能是前边几步时出现了偏差,但没意识到,再次从头做了一遍后就没再出现问题。
这些问题之外还有
执行skyeye1.2.6 成功之后,当输入用户名之后,再输入密码发现密码不正确
这时在文件系统里面etc/passwd里面第一行的:
root:x:0:0:root:/root:/bin/sh
把X删除,之后再重新登陆,此时登陆是不要密码的,登入之后可以用password命令重新设置密码。
当重新启动电脑后发现无法正常登入,出现
*** Warning - bad CRC or NAND, using default environment
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
TFTP from server 10.0.0.1; our IP address is 10.0.0.110
Filename 'uImage'.
Load address: 0x31000000
Loading: checksum bad
T T T T T T T T
这时需要关闭防火墙,就会正常启动了
http://blog.chinaunix.net/space.php?uid=14735472&do=blog&id=110947