班级:09计应1班 姓名:赵超越 学号:0906041011
嵌入式系统移植三部曲
一、Bootloader的移植
1.安装Skyeye
使用mv命令将/usr/local/bin/skyeye 改名为/usr/local/bin/skyeye1.2.6
2.创建交叉编译环境
下 载arm-linux-gcc-2.95.3.tar.bz2、arm-linux-gcc-3.4.1.tar.bz2和arm-linux- tools-4.2.1-20070808.tar.gz(后面的实验会用到在这里一起解压了)并将起解压到/usr/local/arm中(若/usr /local/中没有arm文件夹,自己创建一个)。
3.下载并解压u-boot-1.1.4,并根据课本上的提示修改其中的文件
[root@localhost u-boot-1.1.4]# gedit Makefile
改为
ifeq ($(ARCH),arm)
CROSS_COMPILE=/usr/local/arm/2.95.3/bin/arm-linux-
endif
注:此处红字之后不要有任何字符,即使是一个空格,否则编译U-Boot终端会提示make[1]: /usr/local/arm/2.95.3/bin/arm-linux-命令未找到。若之前没有安装arm-linux-gcc-2.95.3,同样会出现上面的提示。
例:
[root@localhost u-boot-1.1.4]# make
…………
/bin/sh: /usr/local/arm/2.95.3/bin/arm-linux-: 没有那个文件或目录
/bin/sh: line 1: /usr/local/arm/2.95.3/bin/arm-linux-: 没有那个文件或目录
make: *** [u-boot] 错误 127
最后发现只是CROSS_COMPILE=/usr/local/arm/2.95.3/bin/arm-linux- 后多了一个空格。
在smdk2410_config : unconfig
@./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
后面添加
zcy2410_config : unconfig
@./mkconfig $(@:_config=) arm arm920t zcy2410 NULL s3c24x0
注:此处的和后面的zcy2410是自己创建的,都可以更换,但要保证名字一致。
二、Linux的移植
1. 编辑 Makefile 文件将
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
改为
ARCH ?= arm
CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-
注:此处依旧要注意/usr/local/arm/3.4.1/bin/arm-linux-后面无任何字符,尤其注意空格。出现错误参考Bootloader移植过程中的/usr/local/arm/2.95.3/bin/arm-linux-
2.配置内核,产生.config文件
使用#make menuconfig命令配置时,选项中没有<*> YAFFS2 file system support,这时需要建立YAFFS2文件系统。建立过程中,需要注意制作该文件系统需要在/tmp/nfs中制作文件系统为基础进行制作。
3. 执行 skyeye1.2.6 ,通过 u-boot-1.1.4 引导 linux-2.6.14.7通过终端执行 skyeye1.2.6,出现错误提示信息。
[root@localhost u-boot-1.1.4]# skyeye1.2.6
……
TCP reno registered
TCP bic registered
NET: Registered protocol family 1
Reading data from NAND FLASH without ECC is not recommended
Reading data from NAND FLASH without ECC is not recommended
这是因为mtdblock2中还没有文件系统,可以进行根文件系统移植。
三、根文件系统移植
1.编写etc/inittab文件、修改其权限时,一定要注意权限。
[root@localhost nfs]# chmod 755 etc/inittab
[root@localhost nfs]# chmod 755 etc/init.d/rcS
[root@localhost nfs]# chmod 755 etc/fstab
2.创建密码文件时,从宿主机中复制的/etc/passwd文件中,root一行:root:x:0:0:root:/root:/bin/bash,将最后的bash改为sh。设置登录不要密码,则把root后的x去掉。修改完成后的root一行结果:root::0:0:root:/root:/bin/sh
注:若不把bash改为sh,运行时会出现错误
10.0.0.110 login: root
login[30]: root login on 'console'
login: cannot run /bin/bash: No such file or directory
这是因为/etc/passwd中指定了用户的shell为bash,而busybox只有ash和sh,所以要将bash改为sh。
3.若想在开发板上运行程序,需要使用之前安装的arm-linux-tools-4.2.1-20070808.tar.gz,linux自带的gcc编译器编译的文件无法在开发板系统上运行。只能使用arm-linux-gcc编译,之后才可运行。
10.0.0.110 login: root
login[25]: root login on 'console'
Processing /etc/profile... Done
[root@10 /root]# ./test
===== main =====
Hello world!
argv[0]=./test
==== exit main ====
[root@10 /root]# less test.c
#include
#include
int main (int argc,char* argv[])
{
int i;
printf("===== main =====\n");
printf ("Hello world!\n");
for(i=0;i
{
printf("argv[%d]=%s\n",i,argv[i]);
}
printf("==== exit main ====\n");
return 0;
}
4.从nfs启动和mtd启动的区别
nfs需要通过tftp来传输数据的,依赖于宿主机,但启动过程不需要人为操作,自动启动系统。
而mtd则是直接将uImage烧写进内核,启动过程中不需要过分的依赖于宿主机,但启动时需要操作人员自己将uImage烧写进内核,进而启动系统。
http://blog.chinaunix.net/space.php?uid=14735472&do=blog&id=110947