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

2019-07-12 17:58发布

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.             查看共享目录与挂载目录中,文件是否同步