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配置参数
uImage与zImage的区别:
这两个都是内核,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. 查看共享目录与挂载目录中,文件是否同步