嵌入式开发环境配置

一  ubuntu tftp服务一  linux 内核编译
1 解压源码,如下:
# tar -xvzf linux-2.6.30.tar.gz
2 进入源码目录
# cd linux-2.6.30
3 清理目标文件和中间文件残留
# make clean distclean
4 配置 linux (默认newmsg)
# cp newmsg9260_config .config
5 详细配置(该步骤已预先为您配置好,如需修改,请参考相关 Linux 内核配置资料)
# make menuconfig  ARCH=arm
6 编译 linux,生成 uboot 可以识别使用的 uImage
# make ARCH=arm CROSS_COMPILE=arm-linux- uImage
7.确认编译结果
# cd arch/arm/boot

三 内核烧录(newmsg开发板)
1 擦除整个NAND Flash(如果nand出现了坏块可用nand scrub 清除nand flash)
NewMsg> nand erase
2 设置IP地址
NewMsg> setenv ipaddr 192.168.237.209
NewMsg> setenv serverip 192.168.237.210
3 设置启动参数
NewMsg> set bootcmd 'nand read 0x22000000 0xa0000 0x200000; bootm'
NewMsg> set bootargs console=ttyS0,57600 root=/dev/mtdblock0 init=/linuxrc rootfstype=yaffs2

NewMsg> save

4通过tftp下载内核
NewMsg> tftp 0x22000000 uImage

NewMsg> nand erase 0xa0000(如果只是烧录内核不用更新根文件系统:nand erase 0xa0000 0x200000   (擦除0xa0000开始的0x200000(2M)大小的空间))

NewMsg> nand write 0x22000000 0xa0000 0x200000


5 烧写根文件系统
NewMsg> tftp 0x20000000 rootfs-128.yaffs2
NewMsg> nand erase 0x400000
NewMsg> nand write.yaffs 0x20000000 0x400000 0x1f38b40

烧写完毕后,重新启动开发板即可使用。



四  ubuntu tftp服务
  配置步骤:
1. Install tftpd and related packages.

$ sudo apt-get install xinetd tftpd tftp

2. Create /etc/xinetd.d/tftp and put this entry:

$ sudo gedit /etc/xinetd.d/tftp

service tftp
{
protocol        = udp
port            = 69
socket_type     = dgram
wait            = yes
user            = nobody
server          = /usr/sbin/in.tftpd
server_args     = /tftpboot
disable         = no
}

3. Make /tftpboot directory

$ sudo mkdir /tftpboot
$ sudo chmod -R 777 /tftpboot
$ sudo chown -R nobody /tftpboot

4. Start tftpd through xinetd

$ sudo /etc/init.d/xinetd restart
至此Ubuntu tftp服务已经安装完成了,下面可以对其进行一下测试。(假设在当前目录下有一个测试文件test.txt)
$tftp 127.0.0.1                     
tftp> put test.txt
Sent 1018 bytes in 0.0 seconds
tftp> get test.txt
Received 1018 bytes in 0.1 seconds
tftp> quit
通过get命令,可以把当前目录下的test.txt文件,通过Ubuntu tftp上传到它的服务文件目录。这时,在/tftpboot下面会出现test.txt文件。通过put命令,可以从/tftpboot下,下载 test.txt文件。这样就验证了Ubuntu tftp服务配置的正确性。当文件上传与下载结束后,可以通过quit命令或q退出。严格按照以上步骤配置Ubuntu tftp服务,一般都可以成功。如果出现无法get或者put的时候,可以查看一下防火墙是否关闭。




二 NFS文件系统


Ubuntu 默认是没有nfs服务的,所以需要自己安装

1、linux服务器安装nfs服务版
           apt-get install nfs-kernel-server
2、修改nsf配置文件
   vi /etc/exports
           在文件中添加nfs的目录格式如下
   /home/armnfs  *(rw,sync,no_root_squash)
           存盘退出
3、在根目录下建立nsf的目录
   mkdir -p /home/armnfs
   修改该目录的权限
   chmod 777 -R armnfs
4、重新启动nfs
   sudo /etc/init.d/portmap restart
   sudo /etc/init.d/nfs-kernel-server restart

5、测试nsf(在ARM目标板)

mount -o nolock 192.168.237.25:/home/armnfs/  /mnt

进入/mnt目录就可看到服务器192.168.237.25:/home/armnfs/ 下的内容

cd /mnt
ls

相关知识
(1)什么是根文件系统?

     与windows的C盘类似,Linux一样要在一个分区上存放系统启动所必需的文件,比如内核映象文件(在嵌入式系统中,内核一般单独存放在一个分区中)、内核启动后运行的第一个程序(init)、给用户提供操作界面的shell程序、应用程序所依赖的库等。这些系统启动的必需、基本的文件合称根文件系统,他们存放在一个分区中。Linux系统启动后首先挂接这个分区,称为挂接根文件系统。

(2)利用NFS挂接根文件系统来启动系统的必需准备的几个条件:

     a.按照U-Boot的使用说明烧写新内核

     b.在Linux主机上启动NFS服务 /etc/init.d/nfs  start

     c.在U-Boot控制界面修改命令行参数

     set bootargs noinitrd root=/dev/nfs console=ttySAC0 nfsroot=10.0.3.244:/long_nfs/myfs-1 ip=10.0.3.245:10.0.3.244:10.0.3.1:255.0.0.0::eth0:off

     root=/dev/nfs  这个只是告诉内核用的是NFS设备

     console=ttySAC0 这个是控制台

     nfsroot=10.0.3.244:/long_nfs/myfs-1 这个是根文件系统在主机上的路径和主机的IP

     ip=10.0.3.245:10.0.3.244:10.0.3.1:255.0.0.0::eth0:off

ip=::::::这个格式可以去内核文档:/Documentation/nfsroot.txt中查看

在虚拟机中修改网关:route add default gw 10.0.3.1,一般ip是10.0.3.244,默认的网关就是10.0.3.1

d.直接启动系统就可以了

二.NFS服务挂接共享文件

注:内核必须添加对NFS的支持

(1)系统启动以后在控制台挂接共享文件,以下是具体步骤和可能出的问题

   a. 确保Linux主机上已经启动了NFS服务

   b. 确保主机和目标板用网线连接了

c.确保主机和目标板在同一网段,例如这样,主机的ip:10.0.3.244,目标板的ip:10.0.3.245,他们的netmask:255.0.0.0

d.挂接命令:

mount -o nolock -t nfs 10.0.3.244:/long_nfs /tmp/

mount -o nolock 10.0.3.244:/long_nfs /tmp/

这两个都可以。

(2)可能出现的错误类型

a. 错误类型:

rpcbind: server localhost not responding, timed out

RPC: failed to contact local rpcbind server (errno 5).

lockd_up: makesock failed, error=-5

rpcbind: server localhost not responding, timed out

RPC: failed to contact local rpcbind server (errno 5).

mount: mounting 10.0.3.244:/long_nfs on /tmp/ failed: Input/output error

这个问题是因为挂接命令不对,要加上参数-o nolock就可以了

b. 错误类型:

cs89x0: Tx buffer not free!

NETDEV WATCHDOG: eth0: transmit timed out

eth0: transmit timed out, IRQ conflict ??

eth0: transmit underrun

这个问题是因为主机和目标板没有用网线连接

File systems

Network File Systems  --->  

  │ │[*] NFS file system support                                                 │ │
  │ │[*]   Provide NFSv3 client support                                          │ │
  │ │[*]     Provide client support for the NFSv3 ACL protocol extension         │ │
  │ │[*]   Provide NFSv4 client support (EXPERIMENTAL)                           │ │
  │ │[*]   Allow direct I/O on NFS files (EXPERIMENTAL)                          │ │
  │ │[ ] NFS server support                                                      │ │
  │ │[*] Root file system on NFS 
c  nfs:server is not responding,still trying    原因与解决方案
是由于传送的数据太大,出现数据包丢失现象。
 NFS 的默认传输协议是 UDP,而PC机与嵌入式系统通过UPD交互时就会出现严重的网卡丢包现象。可用的解决方案是:在客户端改用TCP协议,使用下面的命令:
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.0.100:/home/nfs/ /mnt
 
五 openvpn配置
一  ntp 配置
编译生产ntpdate 可执行文件
   运行
./ntpdate cn.pool.ntp.org &

调试错误
1 “Error: Servname not supported for ai_socktype”
因为NTP端口没有定义
在/etc/service中添加
ntp             123/tcp
        ntp             123/udp


二 udhcpc
  编译生产udhcpc 客户端可执行文件(或者用busybox)


注:examples/udhcp/simple.script 脚本文件做为default.script拷贝到/usr/share/udhcpc/default.script(使用hellicom)



三  VPN

编译生产openvpn 客户端可执行文件



调试错误
1 Note: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory

无tun文件夹,在rcS中添加
if [ -d /dev/net ]                                                      
then                                                                       
        /bin/mknod /dev/net/tun c 10 200                                 
else                                                                       
        mkdir /dev/net                                 
        /bin/mknod /dev/net/tun c 10 200               
fi      


2 Note: Cannot open TUN/TAP dev /dev/net/tun: No such device (errno=19)
cp /dev/null /dev/tap0   

 解决:内核配置添加
  Networking options:    IP:tunneling
 driver添加Network device support    Universal TUN/TAP device driver support




用syslog记录vpn的日志,利用syslogd记录vpn日志,我比较喜欢这种方式:
  
   vi /etc/syslog.conf
   添加:
       !openvpn
       *.*             /var/log/openvpn.log
   touch /var/log/openvpn.log 设定好权限,重启syslogd服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值