开发板学习记录二:启动

本文记录了使用tftp加载uImage和通过nfs启动文件系统的步骤。在tftp启动时遇到'Access violation'错误,通过修改uImage权限解决。内核需要重新编译以支持nfs,添加相关配置并编译生成uImage。在nfs启动过程中,遇到网络连接问题,通过检查和修改/etc/init.d下对网卡配置的脚本解决。
摘要由CSDN通过智能技术生成

              本文虽标为原创,实际都是参考的网上的资源,权当一个记录

   启动方式采用tftp模式载入uImage,然后用nfs载入文件系统

一、设置tftp载入uImage

             开发板自带的Uboot功能很强大,启动Uboot后设置变量如下

                   baudrate=115200
                   serverip=192.168.1.178
                   bootdelay=3
                  ethact=macb0
                  ethaddr=192.168.1.20
                  bootcmd=tftp 22000000 uImage;bootm 22000000
                  bootargs=mem=128M console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.1.178:/nfsboot,proto=tcp,nolock ip=192.168.1.20:192.168.1.178:192.168.1.1:255.255.255.0::eth0:off


              实际启动时报错 TFTP error: 'Access violation' (2)  根据http://blog.csdn.net/david_xtd/article/details/7881347的文章解决了问题,需要把/tftproot/uImage的权限改为可读写

                  sudo  chmod  666  /tftproot/uImage


二、用nfs启动文件系统

            首先,开发板给的内核是不支持nfs启动的,要先重新编译内核,加入必要的选项才行,过程如下

   将内核源代码解压,在源代码目录下执行 make menuconfig   此时会报错,要安装ncurse的相关包

    sudo  apt-get  install  libncurses5-dev  libncurses5

进入界面后,选择下面的相关项 (引自http://blog.csdn.net/do2jiang/article/details/4195182)

 

添加内核对NFS的支持:

n        Networking Options

(*)TCP/IP networking

(*)IP: kernel level autoconfiguration

(*)IP: DHCP support

(*)IP: Bootp support

(*)IP: Rarp support

 

n        File systems

l      Network File Systems

(*)NFS file system support

(*)Root file system on NFS


    添加支持内核调试的项目 (引自http://www.myir-tech.com/resource/500.asp)

选择“kernel hacking”>“Kernel debugging”选项,其符号为“DEBUG_KERNEL”

选择“kernel hacking”>“compile the kernel with debug info”选项,符号为“DEBUG_INFO”

最后保存退出


执行编译  

进入Makefile,修改

ARCH        := arm
CROSS_COMPILE    := arm-none-linux-gnueabi-

make at91sam9x5ek_defconfig

  make  uImage


实际上这里要先执行 make at91sam9x5ek_defconfig然后再修改nfs和kernel debug的支持。教训深刻!

编译完后将uImage拷贝到设置的tftp根目录下,内核就准备好了

然后将文件系统解压到nfsboot目录下。开发板自带的文件系统都是准备烧录到flash上的,就是将可执行程序制作成img格式

nfs启动不需要这样的文件。本次实验用的是real6410板带的qt系统,直接解压到nfs启动目录即可。


连好板子后上电启动,前期一切正常,在最后报如下错误

eth0: link up (100/Full)
VFS: Mounted root (nfs filesystem) on device 0:13.
Freeing init memory: 148K
mount: mounting none on /proc/bus/usb failed: No such file or directory
hwclock: can't open '/dev/misc/rtc': No such file or directory
eth0: link down
nfs: server 192.168.1.178 not responding, still trying

问百度,多数认为是nfs配置问题导致丢包,按提供的方法改nfs的协议,从udp该到tcp,然后一个就是该每次传输的块,更改rsize和wsize,多种尝试都没有解决,最后有一位大神说是可能是根文件系统启动的时候更改了目标板的ip,最后搜到http://bbs.chinaunix.net/thread-3633824-1-1.html的帖子,基本和他的问题一样,照葫芦画瓢,找到etc/init.d目录下对网卡的配置ifconfig-eth0文件,内容如下

#!/bin/sh

echo -n Try to bring eth0 interface up......>/dev/ttySAC0

if [ -f /etc/eth0-setting ] ; then
    source /etc/eth0-setting

    if grep -q "^/dev/root / nfs " /etc/mtab ; then
        echo -n NFS root ... > /dev/ttySAC0
    else
        ifconfig eth0 down
        ifconfig eth0 hw ether $MAC
        ifconfig eth0 $IP netmask $Mask up
        route add default gw $Gateway
    fi
#    echo nameserver $DNS > /etc/resolv.conf
else

    if grep -q "^/dev/root / nfs " /etc/mtab ; then
        echo -n NFS root ... > /dev/ttySAC0
    else
    /sbin/ifconfig eth0 192.168.1.20 netmask 255.255.255.0 up
    fi
fi
inetd
telnetd
echo Done > /dev/ttySAC0


仔细比对首先发现串口不对,将/dev/ttySAC0改为/dev/ttyS0,然后添加各种打印语句,再重试,发现确实是这个配置文件执行了 ifconfig eth0 down,然后再没启动,问题最后定位在文件系统重新设置eth0时,网络关闭后没有成功的再启动网络,       将这几句 ifconfig eth0 down
        ifconfig eth0 hw ether $MAC
        ifconfig eth0 $IP netmask $Mask up
        route add default gw $Gateway

全部注释掉,再重启一切ok

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值