Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6559770
  • 博文数量: 1159
  • 博客积分: 12444
  • 博客等级: 上将
  • 技术积分: 12570
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-13 21:34
文章分类

全部博文(1159)

文章存档

2016年(126)

2015年(350)

2014年(56)

2013年(91)

2012年(182)

2011年(193)

2010年(138)

2009年(23)

分类: 嵌入式

2011-06-17 09:50:41

班级: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




阅读(847) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~