• 嵌入式系统移植基础三部曲 段彦青


     09计应1班   段彦青  0906041001

          

     嵌入式系统移植基础三部曲

     

    操作系统centos 5.6

     

    准备工作:安装skyeye-1.2.6_rc1

    [root@localhost skyeye-1.2.6_rc1]# ./configure        //配置

    [root@localhost skyeye-1.2.6_rc1]# make              //编译

    [root@localhost skyeye-1.2.6_rc1]# make install       //将skyeye安装到/usr/local/bin/

     

     注意:用skyeye-1.2.8_rc1进行实验时,安装时会出现错误,建议用skyeye-1.2.6_rc1

     

    以下主要介绍实验过程中出错的地方及应该注意的地方:

    第一步引导加载程序Bootloader的移植

    准备工作:

    1)创建交叉编译环境

    下载arm-linux-gcc-2.95.3.tar.bz2arm-linux-gcc-3.4.1.tar.bz2和arm-linux-tools-4.2.1-20070808.tar.gz

    解压到/usr/local/arm中

    注意:如果未创建交叉编译环境,后边实验过程中会提示错误

     

    2)Bootloader:u-boot-1.1.4.tar.bz2

     

    注意:下边的一移植过程一定要注意路径问题

     

    1. 配置好u-boot-1.1.4 ,编译

    [root@localhost u-boot-1.1.4]# make ok2410_config

    [root@localhost u-boot-1.1.4]# make

     

    2. 配置过程中找不到skyeye.conf文件,应在网上下载,复制到u-boot-1.1.4目录下

     

    3.执行skyeye1.2.6

    [root@localhost u-boot-1.1.4]# skyeye1.2.6

     

    4. 移植完nand flash ,测试u-boot是否可以从nand flash 启动

    执行以下命令

    [root@localhost u-boot-1.1.4]# skyeye1.2.6

    [root@localhost u-boot-1.1.4]# mknandflashdump u-boot.bin nand.dump 0

    提示:mknandflashdump:command not found

    下载  mknandflashdump.c 文件并编译:

    [root@localhost u-boot-1.1.4]# gcc mknandflashdump.c -o mknandflashdump

    然后再执行

    [root@localhost u-boot-1.1.4]# ./mknandflashdump u-boot.bin nand.dump 0

     

    第二步、Linux内核的移植

    内核:linux-2.6.14.7

     

    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- 后边无空格,如果多了空格,后边会出现错误

     

    2.设置flash 分区

    编辑devs.c文件,内容如下:

     

    /*nand */

    #include

    #include

    #include

    /* NAND Controller */

    /************************ 建立Nand Flash分区表 ************************/

    /* 一个Nand Flash总共64MB, 按如下大小进行分区 */

    /*

    name:代表分区名字

    size:代表Flash分区大小(单位:字节)

    offset:代表Flash分区的起始地址(相对于0x0的偏移)

    */

    static struct mtd_partition partition_info[] =

    {

        { /* 1MB */

            name: "bootloader",

            size: 0x00100000,

            offset: 0x0,

        },

        { /* 3MB */

            name: "kernel",

            size: 0x00300000,

            offset: 0x00100000,

        },

        { /* 40MB */

            name: "root",

            size: 0x02800000,

            offset: 0x00400000,

        },

        { /* 20MB */

            name: "user",

            size: 0x00f00000,

            offset: 0x02d00000,

        }

    };

    /************************ 加入Nand Flash分区 ************************/

    /*

    注意:此处应注意每个分区的起始地址及大小,这些代码必须复制到头文件下边,不然运行时会出错

     

    3.配置内核,出现如下情况

    执行#make menuconfig命令配置时,选项中没有<*> YAFFS2 file system support,原因是没有建立YAFFS2根文件系统。

    先安装busybox ,建立根文件系统,系统根目录为/tmp/nfs。

    下载yaffs2.tar.gz,编辑并配置内核,然后执行

    [root@localhost linux-2.6.14.7]# cd ../u-boot-1.1.4/tools/

    [root@localhost tools]# ./mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008000 -n linux-2.6.14.7 -d vmlinux uImage

     

    此步是用mkimage 工具将vmlinux 制作成U-boot可以引导的linux内核映像uImage

     

    4.搭建TFTP服务器TFTF服务器用于将uImage 下载到开发板内存

    将uImage 复制到tftp服务器根目录下(/tftp), 这样可以通过tftp协议将其下载到开发板上。

     

    权限需注意:

      [root@localhost Desktop]#chmod -R 755 /tftpbooot

     

    5.执行skyeye1.2.6,通过u-boot-1.1.4 引导linux-2.6.14.7

     

    [root@localhost u-boot-1.1.4]# skyeye1.2.6

    .

    .

    OK2410 # printenv

    bootargs=noinitrd root=/dev/nfs rw nfsroot=10.0.0.1:/tmp/nfs ip=10.0.0.110:10.0.0.1:10.0.0.1:255.255.255.0 init=linuxrc console=ttySAC0,115200  mem=64M

    bootcmd=tftp 0x31000000 uImage;bootm 0x31000000        //要记住该环境变量,后面的实例中会用到

    bootdelay=3

    baudrate=115200

    ipaddr=10.0.0.110

    serverip=10.0.0.1

    netmask=255.255.255.0

    stdin=serial

    stdout=serial

    stderr=serial

    ethaddr=08:00:3E:26:0A:5B

     

    Environment size: 341/65532 bytes

    OK2410 #

    OK2410 # setenv bootargs noinitrd mem=64M root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200

    OK2410 # tftp 0x31000000 uImage

    OK2410 # bootm 31000000

    ## Booting image at 31000000 ...

       Image Name:   linux-2.6.14.7

    中间内容略去

    Reading data from NAND FLASH without ECC is not recommended

    Reading data from NAND FLASH without ECC is not recommended

    Reading data from NAND FLASH without ECC is not recommended

     

    此处为硬伤,继续下边的步骤

     

    三、根文件系统的移植

    1.编写etc/proflie文件、修改其权限

    [root@localhost nfs]# gedit etc/proflie

    文件内容如下

     

    # /etc/profile: system-wide .profile file for the Bourne shells

    echo

    echo -n "Processing /etc/profile... "

    # no-op

    # Set search library path

    echo "Set search library path in /etc/profile"

    export LD_LIBRARY_PATH=/lib:/usr/lib

     

    # Set user path

    echo "Set user path in /etc/profile"

    export PATH=/bin:/sbin:/usr/bin:/usr/sbin        #设置命令搜索路径

    export HISTSIZE=100

    export PS1='[u@h W]$ '

    alias ll='ls -l'

     

    #/sbin/ifconfig eth0 192.168.1.22 netmask 255.255.255.0

    /sbin/ifconfig lo 127.0.0.1

    echo "Configure net done"

    ll Done"

    echo "A

    Echo

     

    将以下2行复制到profile中可以改变命令提示符为[root@ dyq/root]

    export PS1='[u@h W]$ '

    alias ll='ls -l'

     

    2.创建密码,修改其权限

     

    [root@localhost nfs]# cp /etc/passwd etc/ ;cp /etc/shadow etc/ ;cp /etc/group etc/

    [root@localhost nfs]# chmod 600 etc/shadow

    [root@localhost nfs]# gedit etc/passwd

    内容是:root:x:0:0:root:/root:/bin/sh

    [root@localhost nfs]# gedit etc/shadow

    内容是:root:$1$zs2zr2N4$15U99ll5tUm3DwOvKnCVV1:14335:0:99999:7:::

    [root@localhost nfs]# gedit etc/group

    内容是:root:x:0:root

     

    注意:一定要将最后的bash改为sh

    注意如果不要密码,把/etc/passwd 第一行的X去掉即可

    至此,一个基本的根文件系统(通过nfs挂载)构建完成

     

    3.完整的启动过程(u-boot、内核、文件系统)

     

    注意:在嵌入式系统开发的过程中,一般的做法是通过tftp将操作系统内核下载到开发板,内核引导时通过NFS挂载根文件系统

     

    OK2410#run bootcmd

    login:root

    [root@dyq /root]# printenv

    内容省略

    测试:

    [root@dyq /root]# ./test

    ===== main =====

    Hello world!

    argv[0]=./test

    ==== exit main ====

    [root@dyq /root]# ./test as sdfasdf asdfasf

    ===== main =====

    Hello world!

    argv[0]=./test

    argv[1]=as

    argv[2]=sdfasdf

    argv[3]=asdfasf

    ==== exit main ====

     

    测试成功,即用skyeye模拟的一个嵌入式开发环境已经建立成功了。

     

    NFS与MTD两种方法的对比

    1.通过NFS服务器挂载根文件系统

    在u-boot启动skyeye1.2.6,通过TFTP服务器将uImage下载到开发板上,用NFS将其挂载在开发板上,开始启动内核;

           这种方法需要搭建TFTPNFS服务器,在开发的过程中这种方法是经常使用的

    2.将uImage 烧写到 nand flash中

    这种方法将uImage烧写到开发板上,需要建立Cramfs文件系统。

    建立后执行:

    Ok2410 # tftp 0x31000000 uImage

    Ok2410 # nand erase 0x00100000 0x00300000

    Ok2410 #nand write 0x31000000 0x00100000 0x00300000

    Ok2410 # setenv bootcmd 'nand read 0x31000000(起始地址) 0x00100000(偏移地址) 0x00300000(大小); bootm 0x31000000'

    Ok2410 # saveenv

     

    设置成功后,重新启动,即从nand flash 启动内核



    http://blog.chinaunix.net/space.php?uid=14735472&do=blog&id=110947




    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(1508) | 评论(0) | 转发(2) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    http协议get方式获取图片
    listview全选,和反选的实现
    猜红桃A游戏
    java虚拟机的类加载器
    正则表达式基本用法
    echarts饼图配置模板
    spring----bean的使用
    mysql特殊查询----分组后排序
    java程序存入数据库中文乱码解决方案
    echarts功能配置实例----柱/折线、饼图
  • 原文地址:https://www.cnblogs.com/ztguang/p/12647509.html
Copyright © 2020-2023  润新知