在Linux下搭建嵌入式开发环境(一)

1、搭建开发环境

       常用编译器有:

arm-linux-gcc-版本号

安装直接解压,路径

添加环境变量

/

cross-版本号

/usr/local/arm

a.    安装arm-linux-gcc编译器

1)解压

#tar zxvf arm-linux-gcc-4.4.3.tar.gz-C /

2)配置环境变量

打开#vi  /etc/profile

添加:export setPATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin

3)测试

#arm-linux-gcc test.c

使用file  a.out,查看是不是ARM架构

#file a.out

a.out: ELF 32-bit LSB executable, ARM, version 1 (SYSV),for GNU/Linux 2.6.32, dynamically linked (uses shared libs), not stripped

4)可能出现错误

#arm-linux-gcc a.c

/opt/FriendlyARM/toolschain/4.4.3/libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1:/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by/opt/FriendlyARM/toolschain/4.4.3/lib/libppl_c.so.2)

/opt/FriendlyARM/toolschain/4.4.3/libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1:/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by/opt/FriendlyARM/toolschain/4.4.3/lib/libppl.so.7)

原因:库版本过低,没有GLIBCXX_3.4.9

#strings /usr/lib/libstdc++.so.6 | grepGLIBCXX

GLIBCXX_3.4

GLIBCXX_3.4.1

GLIBCXX_3.4.2

GLIBCXX_3.4.3

GLIBCXX_3.4.4

GLIBCXX_3.4.5

GLIBCXX_3.4.6

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_FORCE_NEW

解决方法:使用libstdc++.so.6.0.10代替

/usr/lib/

#ln –sf  libstdc++.so.6 libstdc++.so.6.0.10

b.   编译u-boot

机器码——与内核中的机器码必须一致,系统才可启动(可以自定义,但必须一致)

 

       修改开发板相关配置文件include/configs/mini2440.h

       //uboot启动后,内核加载的延时

139#defineCONFIG_BOOTDELAY    1

//Linux内核引导参数

140 #defineCONFIG_BOOTARGS     "noinitrdconsole=ttySAC0,115200

                                         不使用初始启动镜像 标准输入输出定向到串口0

init=/linuxrc root=/dev/nfsnfsroot=192.168.11.11:/work/embedded/rootfs

          指定根文件系统    使用绝对路径

ip=192.168.11.22:192.168.11.11:192.168.11.11:255.255.255.0:micro2440.arm9.net

    开发板IP     网关      DNSIP      子网掩码  主机名

:eth0:off"

//MAC地址

141 #define CONFIG_ETHADDR          08:08:11:18:12:27

//子网掩码

142 #defineCONFIG_NETMASK          255.255.255.0

       //开发板IP

143 #defineCONFIG_IPADDR       192.168.11.22

       //主机IP

144 #defineCONFIG_SERVERIP     192.168.11.11

       //主机网关

145 #defineCONFIG_GATEWAYIP    192.168.11.11

146 #defineCONFIG_OVERWRITE_ETHADDR_ONCE

147

148 /*#defineCONFIG_BOOTFILE   "elinos-lart"*/

149 #defineCONFIG_BOOTCOMMAND  "tftp 0x30007fc0uImage \; bootm"

                                                                             命令1   表命令结束    命令2

//bootm 通过uImage引导Linux操作系统

当使用zImage引导时,将丢失CONFIG_BOOTCOMMAND配置参数

 

uImagezImage的区别:

       这两个都是内核,zImage是真正的内核,在内存中的地址0x30008000;而uImage是包含64字节头的内核,在头中存放着bootargs环境变量,在内存中的地址0x30007fc0

64字节头

          

编译命令

#make  ARCH=arm  CROSS_COMPILE=arm-linux-  mini2440_config

                              交叉编译器前缀            配置文件

#make  ARCH=arm  CROSS_COMPILE=arm-linux-  all

c.     所需服务的搭建tftp、nfs服务

1)tftp服务的配置

tftp——简单的文本传输协议,用于给开发板共享内核以及引导程序重新固化时。

 

l  修改配置文件/etc/xinetd.d/tftp

service tftp

{

    socket_type     = dgram  #网络类型

    protocol        = udp

    wait            = yes

    user            = root

    server          = /usr/sbin/in.tftpd

    server_args     = -s /tftpboot  #-s路径 用于指定服务器共享目录

    disable         = no  #是否禁用此服务

    per_source      = 11

    cps           = 100 2

    flags           = IPv4

}

l  重启服务:

       #service xinetd.d restart

l  测试是否成功:

         i.             安装tftp客户端,通过系统光盘安装

#mount /dev/cdrom /media/

#rpm -ivh /media/Server/tftp-0.49-2.i386.rpm

       ii.             使用tftp命令下载文件测试

#tftp 192.168.11.11

tftp> get test

2)nfs服务的配置

nfs——网络文件系统,用于为开发板共享文件系统,延长flash寿命,提高开发效率。

 

l  打开配置文件/etc/exports (默认为空文件)

添加 

 /work/embedded/rootfs*(rw,sync,no_root_squash)

书写格式:

              共享目录    共享的目标名或IP(共享参数列表)

       每行都是一个共享目录的配置

       rw —读写   sync — C/S数据,同步更新

       no_root_squash —不压制root权限

注:参数之间用逗号分隔,并且逗号两端不能有空格

l  重启服务

#service portmap start

       #service nfs restart

l  测试服务

        i.             挂载共享文件系统

#mount192.168.11.11:/work/embedded/rootfs/ /media/

        ii.             查看共享目录与挂载目录中,文件是否同步

你可能感兴趣的:(嵌入式)