应用一斑     王延龙   


嵌入式系统移植三步曲

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

这时需要关闭防火墙,就会正常启动了