打印

嵌入式linux开发环境搭建---基于mini2440

[复制链接]
244|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
嵌入式linux的开发环境搭建:宿主机:虚拟机上的linux红帽企业版5

开发板:友善之臂mini2440开发版

bootloader:u-boot

根文件系统:NFS



1:宿主机环境搭建

    在PC上安装虚拟机,并安装好linux红帽企业版5;配置并启动samba、nfs、tftpboot三个服务器;

    简要说明三种服务器的配置与启动,我们可以通过setup来查看系统安装时是否已经安装了这些服务器,如果在setup菜单中可以看到对应服务器的名称则表示已经安装了服务器,如果服务器前面有*,表示该服务器随系统启动。

    samba服务器【与windows实现共享,两者需在同一个局域网】:

        配置服务器:vi/etc/samba/smb.conf(添加如下代码:)  

                  1:[linux]         

                  2:     comment    = Root Directories

                  3:     browseable  =yes

                  4:     writeable   =yes

                  5:     path       = /

                  6:     valid users =xxx

        注释:1:共享目录名称 3:共享可视设置 4:可写  5:linux下共享的路径6:共享用户名称,xxx用户必须是linux系统已存在的用户,可以useradd添加,通过smbpasswd -a xxx修改密码

       启动/重启服务器:配置好之后,需要启动或重启服务器 /etc/init.d/smb  restar或start

       查看服务器状态:netstat -a| grep nfs 若服务没有启动,没有任何显示,否则会显示出相应服务器

       注释:若想访问共享路径下的某些文件夹或文件,还需要修改文件夹或文件的权限,chmod 777/home

    tftp服务器【供uboot通过tftpboot命令,实现网络下载内核或根文件系统或挂载NFS根文件系统】:

      创建tftp服务器目录: 这里直接使用/tftpboot即可

      配置服务器:vi /etc/xinetd.d/tftp(修改两次即可)

                 disable =yes ==> disable = no

                 server-args = -s /tftpboot【指定tftp服务器的目录】

      启动/重启服务器 :/etc/init.d/xinetdstart或restart 【服务器配置后均需重启以启用新参数】

      查看服务器状态:netstat-a | grep tftp

    NFS服务器【linux与linux间共享机制,网络文件系统,开发时内核一般采用NFS文件系统,挂载宿主机上的NFS服务器所提供的NFS文件系统】:   

      配置服务器:vi /etc/exports(修改两次即可)

                 添加/home/NfsRoot  192.168.1.*(rw,sync,no_root_squash)

                注释:/home/NfsRootNFS服务器目录  192.168.1.* 可访问的IP地址(局域网内地址)

      启动/重启服务器:/etc/init.d/nfs start或restart

      手动挂载:mount -t nfs serverip:/共享路径  /挂载路径

               mount -t192.168.1.138:/home/NfsRoot  /mnt/nfs

2:下载Uboot

   先可以在网上下一个u_boot.bin,搭建整个系统以求验证;

    推荐:http://blog.chinaunix.net/uid-20543672-id-94379.html 先获取u_boot.bin

    再通过JLINK下载;

   1:开发板从NOR处上电,打开J_Flash ARM

   2:Target->Connect;File->OpenProject->mini2440-S29AL016.jflash【加载该文件后,Jlink下载稳定,且基本配置已设置好】

   mini2440-S29AL016.jflash文件可以向供应商获取或网上搜索;

    3:Open datafile->u-boot.bin->起始地址设为0

   4:Target->Auto

   下载好了u-boot后,就可以对内核以及内核启动参数进行下载与设置了。

3:安装交叉工具链

   要编译内核或编译程序,需要交叉工具;从mini2440官网上http://www.arm9.net/download.asp下载arm-linux-gcc-4.4.3-20100728.tar.gz

   tar-zxvf arm-linux-gcc-4.4.3-20100728.tar.gz / 【解压到跟目录下的对应路径下】

  这时工具解压后的可执行文件路径还需要设置到PATH环境变量中去,方法如下:

  vi /etc/profile;为PATH再添加一条路径,以供能执行命令:

  pathmung/opt/FriendlyARM/toolschain/4.4.3/bin

4:编译获取内核镜像文件

   参考mini2440官网已经移植好的内核代码,http://www.arm9.net/download.asp -> Linux2.6.32.2 formini2440/micro2440 [2011-04-21] -内含缺省配置文件(config_mini2440开头)

  解压进入顶层目录

  1:make distclean

  2:cp config_mini2440 .config

  3:make menuconfig ARCH=arm

       注意:可以开启内核通过串口的调试,这样出现错误时,串口可以打印出错误信息,方便调试;  kernel hacking->选择kerneldebugging(很多默认选项已经被选中)->选择kernel low-level debuggingfunctions【系统配置时要添加串口驱动,官网提供的代码中以移植好】

  4:make zImage -->在arch/arm/boot/下存在内核镜像zImage

  5:cp arch/arm/boot/zImage /tftpboot/zImage【以便下载】、

5:制作NFS根文件系统

    先使用mini2440官网已经做好的根文件系统,http://www.arm9.net/download.asp->Rootfs-Qtopia-Qt4

   官网拷贝里面所有的文件到NfsRoot下面即可;

6: 下载内核 与 设置 UBOOT中的各参数

   设置uboot的ip【uboot的ip与虚拟机的一张网卡需要在同一局域网内,可以参考我的另一片博文 宿主机双网卡、虚拟机双网卡、UBoot、tftp下载设置,进行局域网参数设置】,

   宿主机linux的一张网卡的IP是192.168.1.138

   setenv ipaddr 192.168.1.128

   setenv  serverip192.168.1.138

   setenv  gatewayip192.168.1.1

   setenv  netmask255.255.255.0

    setenv bootargs noinitrd root=/dev/nfsrw nfsroot=192.168.1.138:/home/NfsRoot  ip=192.168.1.126:192.168.1.138:192.168.1.1:255.255.255.0console=ttySAC0,115200 mem=64M

    saveenv

   下载内核

   tftpboot 0x30008000zImage

   启动内核

   go 30008000

   出现的问题:内核启动过程一直停留在 booting zhekernel

  这时因为启动了内核的调试,屏幕上打印的信息是

    Error: unrecognized/unsupported machine ID (r1 =0x33f616b4).

    Available machine support:

     ID(hex)       NAME

    000007cf       MINI2440

     Pleasecheck your kernel config and/or bootloader

  原因是:go 命令 与 bootm命令的根本区别导致:go和bootm差异就是go只是改写pc值,而bootm 除了改PC外传递r0,r1,r2还有bootargs

  参考另一篇博文用uboot 烧写uboot linux内核 文件系统到nandflash的 过程以及bootm go命令启动与区别

   要解决这个问题,两个办法,1:修改启动代码,在代码中传入参数2:使用uImage,再 用bootm 命令传递参数;

   采用第二种办法;

6: 下载uImage 制作工具

  在网上下载 u-boot镜像文件生成工具mkimage.rar;将解压得到的可执行文件mkimage放到/bin目录下;

7: 再次编译内核

   make uImage ARCH=armCROSS_COMPILE=arm-linux-

   这样默认生产的uImage的加载地址与执行地址都是0x30008000;

   下载后出现问题:startingkernel....

                    dataabort 8:手动生产uImage   mkimage-n 'xxx' -A arm -O linux -T kernel -C none -a 0x30008000 -e0x30008040 -d zImage uImage     

   下载后,就可以使用了

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

437

主题

437

帖子

0

粉丝