一。安装交叉编译工具
1.FTP下载交叉编译工具
#ftp ftp.arm.linux.org.uk ;用户名和密码为:FTP ,FTP 。
#ls
#cd pub/armlinux/toolchain/ ;交叉编译工具在此目录下 。
#ls
#bin ;转换到二进制方式传输文档 。
#get cross-2.95.3.tar.bz2 ;下载
#bye ;推出FTP 。
2.安装交叉编译工具
#cd /usr/local
#mkdir arm
#cp /home/work/cross-2.95.3.tar.bz2 ./
#tar -xjf cross-2.95.3.tar.bz2
指定编译器的位置。
/etc/profile 用gedit打开 ,在pathmunge /usr/local/sbin下加上一行
pathmunge /usr/local/arm/2.95.3/bin
重启
研发板烧制Boot:
首先要去掉JP4跳线,即去掉JP4的盖子 。
1.首先在终极终端的Xmodem下(传送-发送文档-Xmodem)发送文档fft-loader.bin(板子光盘自带)。
2.在Xmodem下,发送fft-Uboot-v2.0.bin文档,发送完毕后显示>FFTBoot的提示符
3.擦除FLASH
FFTBOOT>protect off all
FFTBOOT>erase all
4.
装入fft-boot.bin
FFTBOOT>loadb 20000000
在终极终端下用Kermit模式发送文档fft-boot.bin
FFTBOOT>cp.b 20000000 10000000 5fff
在终极终端显示拷贝的情况 。
5.装入fft-Uboot.gz
FFTBOOT>loadb 20000000
在终极终端下用Kermit模式发送文档fft-Uboot-v2.0.gz
FFTBOOT>cp.b 20000000 10010000 ffff
在终极终端显示拷贝的情况
FFTBOOT>protect on 10000000 1001ffff
FLASH区域保护
合上JP4跳线(即插上JP4的盖子)。复位重启,然后进行操作系统内核和文档系统的烧写。
二。Linux内核的配置和编译
1.下载内核或使用现成的内核压缩包 。我使用的是板子的光盘自带的内核压缩包:G:\share\FFT-9200的光盘-V2.0\标准配置光盘\Linux-arm9\内核。linux-2.4.19-rmk7.tar.gz
将内核压缩包拷贝到Linux下的/usr/src/arm下,并且解压缩,得到内核源码。
2.配置内核前的必要配置
主要配置在内核源码中的makefile文档,主要配置两个地方:ARCH 和 CROSS_COMPILE 。
ARCH:=arm ;表示目标板为arm
CROSS_COMPILE=您所安装的交叉编译工具的地址 ;
3.内核配置
#make menuconfig ;菜单界面
此条命令在已解压缩的内核源码文档夹目录下运行,我当时没有成功,多试几次就能够了,原因不详。
1》.Code maturity level options : 代码成熟度选择 。
1) Prompt for development and/or incomplete
code/drivers:选中此选项,则表示每个模块中处于测试中的子模块会出现在模块的配置选项中,并且在配置选项后面注明
(EXPERIMENTAL),表明这个模块还没有经过成熟的测试,不能确保模块的可靠性。
2) Prompt for obsolete code/drivers : 选中,则模块配置选项中只出现成熟的模块,任何的模块都经过了可靠性的测试。
一般选择1),因为某些模块虽然不成熟,却是系统所需要的 。
2》.Loadable module support :可加载模块支持
一些不常用的驱动或特性能够编译为单独的模块,在系统需要时,加载到内核,无需时从内核卸载。增加系统配置的灵活性 。
3》.System Type :系统类型
用于配置CPU类型连同对系统基本的硬件类型的支持 。
4》.General setup : 通用配置
配置内核对虚拟内存的支持和为System V的进程提供通信机制
5》.Memory Technology Devices(MTD) : 存储技术设备
MTD实际上就是嵌入式系统FLASH设备的驱动 。
6》.Block devices : 块设备
块设备包括了对磁盘,RANDISK等的驱动支持 。
RAMDISK实际上就是在系统内存上虚拟了一个文档系统设备或盘 。
7》.Networking options :网络协议栈支持
对于大部分的嵌入式应用而言,支持TCP/IP协议栈是必需的 。
8》.Networking device support :网络设备支持
网络设备即网络接口硬件 。对于大部分的嵌入式应用,Etherent(10 or 100Mbit)是最为常见的选择,这其中包含了对特定网卡的驱动 。
9》.Character devices :字符设备
字符设备包括了一类设备,比如:SPI接口设备 ,串口设备 。
10》.File system :文档系统
文档系统选项所涉及的内容较多,建议在默认配置的基础上进行修改 。对于大多数嵌入式应用来说,需要DOS FAT(FAT16 ,FAT 320),VFAT ,EXT2 ,NFS支持。对于FLASH设备,则需要JFFS文档系统 。
根据自己系统的需要,配置好内核后 ,推出配置菜单,并且保存 。
4.Linux内核编译
#make clean ; 仍然在Linux内核的加压文档目录下运行 。此命令用于删除过时的文档,即原来的编译结果连同一些旧的数据文档 。
#make dep ;执行此命令进行依赖性编译 。
依赖性编译:我添加或删除了内核的某个功能,但这个功能对程式c有影响,而程式c对程式b有影响,程式b对程式a又有影响。假如程式数量很多,很难用手
工来完成,而采用依赖性编译则能够自动完成该项工作 。
#make zImage ;生成可执行内核映像文档。
uImage是U-BOOT专用的,zImage就是普通的压缩内核。
5.内核的烧写
我是采用以太网模式进行内核的移植,所以服务器和研发板要用网线相连接 。
•FFT-9200的光盘-V2.0\标准配置光盘\Linux-arm9下的:
•tftpserver文档夹
•tftpboot文档夹
•复制到C盘。
•并将要烧制的内核文档拷到现在这两个文档夹下。此次用的内核文档名是:uImage-2005-03:支持NFS调试功能
•运行tftpserver文档夹中的TFTPSRV.EXE
•启动电脑终端 ,并且Stop Autoboot 。输入命令:
• FFTBOOT>setenv ethaddr 12:34:56:78:99:aa
• FFTBOOT>setenv ipaddr 192.168.0.11
• FFTBOOT>setenv serverip 192.168.0.55(即现实主机的IP地址也要改成这个)
• FFTBOOT>setenv bootdelay 5
• FFTBOOT>saveenv
• FFTBOOT>tftp 21000000 uImage(将内核下载到内存)
•
•此步结束会看到所烧内核的大小:b4a0b (内核的大小后面要用到)
FFTBOOT>cp.b 21000000 10060000 b4a0b ;将内核从内存的21000000起始位置拷贝至Flash的10060000起始位置 。内核的大小为:b4a0b
•将内核烧到Flash中去 时可能烧不进去,因为此处需要擦除Flash中的内核存放区。
•10060000~101FFFFF 内核的存放区域
•命令:erase 10060000 101FFFFF 擦除内存区域
三.根文档系统及制作
首先从板子的附带光盘中拷贝RAMDISK压缩文档:myramdisk2.gz 。拷到/mnt/ramdisk下
#gzip -d myramdisk2.gz ;解压缩文档 。解压缩完毕后,出现一个myramdisk2文档 。
#mkdir ram_disk ;在/home/work下建文档夹ram_disk
#mount -o loop myramdisk2 ram_disk ;将解压得到的文档myramdisk2挂载到ram_disk文档夹下 。
#cd ram_disk
#ls ;可在ram_disk目录下看到文档myramdisk2所包含的子文档系统内容 。
/bin和/sbin:包含有必不可少的应用程式 ,如ls,mv,cat等 。用户可根据需要选择 ,但一定要包括程式:init ,getty ,login ,mount ,运行rc的shell等 。
/etc :含有一些必可少的系统配置文档 。
/lib : 包含启动过程中所需要的共享函数库 。如缺少,则系统不能正常启动 。
/dev :含有系统不可缺少的设备文档 。
/tmp :用于存放临时文档 ,一般为空 。
用户根据系统需要,对相关文档进行增减,即在相关目录下增加或删除一些文档 ,操作完成后,卸载ram_disk和文档myramdisk2的连接 ,并对新的ramdisk2进行压缩 。
#umount /ram_disk ;此法可能不行 。换 :#umount -l /mnt/ramdisk/ram_disk .在/mnt/ramdisk下执行此命令 。切记 。
#gzip myramdisk2 ;即将myramdisk2文档压缩成一个新的压缩文档myramdisk2.gz 。在/mnt/ramdisk下运行 。
根文档系统的移植:
FFT-9200的光盘-V2.0\标准配置光盘\Linux-arm9下的:
• tftpserver文档夹
• tftpboot文档夹
• 复制到C盘。
•并将要烧制的文档系统拷到现在这两个文档夹下。此次用的文档系统是myramdisk2.gz 。是板子光盘自带的。
•运行tftpserver文档夹中的TFTPSRV.EXE
•启动电脑终端 ,并且Stop Autoboot 。输入命令:
• FFTBOOT>setenv ethaddr 12:34:56:78:99:aa
• FFTBOOT>setenv ipaddr 192.168.0.11
• FFTBOOT>setenv serverip 192.168.0.55(即现实主机的IP地址也要改成这个)
• FFTBOOT>setenv bootdelay 5
• FFTBOOT>saveenv
• FFTBOOT>tftp 20000000 myramdisk2.gz (将文档系统下载到内存)
此步结束后会看到文档系统的大小:4e3530
FFTBOOT>cp.b 20000000 10200000 4e3530 ;将文档系统由内存拷贝到Flash 。
FFTBOOT>
setenv bootdelay 3;setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200 mem=32M
FFTBOOT>saveenv
FFTBOOT>
setenv bootcmd cp.b 10200000 21100000 4e3530\;bootm 10060000 (4e3530)文档系统大小
FFTBOOT>saveenv
板子重启
• 四 。网络文档系统(NFS)及配置
1.Linux服务器端NFS服务器的配置
Linux下的IP设为192.168.0.55
#vi /etc/exports ;在该文档中添加如下内容 :
/home 192.168.0.*(rw,sync,no_root_squash)
添加的内容表示:允许IP地址范围在192.168.0.*的电脑以读写的权限来访问/home目录 。/home也成为服务器输出共享目录 。
括号参数意义:
rw :读/写权限,只读权限的参数为ro 。
sync :数据同步写入内存和硬盘,也能够使用async,此时数据会先暂时存于内存中,而不立即写入硬盘 。
no_root_squash :NFS服务器共享目录用户的属性,假如用户是root,那么对于这个共享目录来说就具备root的权限 。
#/etc/rc.d/init.d/nfs start ;启动NFS
在启动服务之前,要先关掉服务器的防火墙。
关掉防火墙的方法:在系统配置-服务器配置-服务中,关掉iptables .
或用命令的方法:/etc/init.d/iptables stop 。
#mount -t nfs 192.168.0.55:/home /mnt
#ls ;此两句的作用是在服务器上进行NFS服务器的回环测试 ,验证共享目录是否能够被访问 。
2.研发板的配置
Ifconfig eth0 192.168.0.22
mount -t nfs -o nolock 192.168.0.55:/home /mnt 挂载。
首先研发板的内核必需支持NFS客户端 ,在进行内核配置时,必须选择而如下选项:
File system-Network File System-Provide NFSv3 client support
五。建立Samba服务器
1).Samba的工作原理
将一台运行Linux的机器伪装成一台运行在网络中的Windows NT服务器 。
实际上是将NETbios协议和SMB协议绑定在TCP/IP协议上运行 。
Samba是个工具套件。用于Unix上实现SMB(Session Message Block)协议 ,也称为NETBIOS/LanManager 。Windows实现磁盘和打印机共享,连同网上邻居也是使用这个协议 。
#Rpm -qa | grep samba ;检查系统是否安装Samba 。
若没有,则到red hat 9.0第一张盘 : //cdrom/redhat/RPMS/目录下拷贝 。
分别设虚拟机的IP为:192.168.0.55
Windows的IP为:192.168.0.22
关闭虚拟机和Windows的防火墙 。
#Service smb start ;开启Samba服务
#smbmount //192.168.0.22/share /mnt/smb -o username=zhj1011
二。嵌入式Linux应用程式的研发
服务器下研发好test.c文档后,用如下命令编译应用程式:
#arm-linux-gcc -o test test.c
执行完命令后,会在当前目录下生成可执行文档test 。
然后在嵌入式目标系统端即研发板挂载Linux服务器的输出共享目录,并运行应用程式 。
#./test
三。嵌入式Linux应用程式的调试方法
1.在Linux服务器上使用GDB调试程式
1).使用gcc对应用程式进行编译
#gcc -g -o test test.c
2).使用gdb对生成的可执行程式进行调试
#gdb test
gdb常用命令及功能:
命令 缩写 功能描述
help h 帮助
file 装入待调试的可执行文档
list l 列出程式源码
run r 运行被调试的程式
break b 配置一个断点
delete d 删除断点或其他表达式
continue c 继续调试程式
next n 单步执行但不进入函数内部
step 单步执行进入函数内部
print p 打印变量值
set variable 修改变量值
watch wa 监控变量值
quit q 终止gdb
(gdb) b 9 :在程式的第9行配置一个断点 。
2.在嵌入式目标系统上使用GDB调试程式
前提是安装好交叉编译工具 。
首先下载gdb源码,我下载的是gdb-6.6.tar.gz 。存放于/home/zhj1011目录下 。
#tar xvzf gdb-6.6.tar.gz ;解压缩源码压缩包 ,在/home/zhj1011目录下运行 。gdb的解压缩文档放在/home/zhj1011下
#mkdir /home/zhj1011/mygdb
#../gdb-6.6/configure --target=arm-linux --prefix=/home/zhj1011/mygdb
;在/home/zhj1011/mygdb下运行 。我当时没有成功是因为磁盘没有足够的空间 。
若gdb的解压缩文档放在/home/zhj1011/mygdb下 ,则上面的编译程式为 :#./gdb-6.6/configure --target=arm-linux --prefix=/home/zhj1011/mygdb
也就是比上面一条命令少了一个点,因为上面的解压缩文档是在运行目录的上一层,所以是../configure.............
参数说明:target是您的目标板,我的是arm-linux,prefix是您要安装的目标文档夹。
#make ;在/home/zhj1011/mygdb下运行 。
#make install ;在/home/zhj1011/mygdb下运行 。
建立gdbserver
#mkdir mygdbserver 建立目录/home/zhj1011/mygdbserver
#cd mygdbserver
#chmod +x ../gdb-6.6/gdb/gdbserver/configure ;在目录/home/zhj1011/mygdbserver下运行 。
#CC=arm-linux-gcc ../gdb-6.6/gdb/gdbserver/configure --host=arm-linux --prefix=/home/zhj1011/mygdbserver ;/home/zhj1011/mygdbserver下运行 。
#make ;/home/zhj1011/mygdbserver下运行 。
#make install ;/home/zhj1011/mygdbserver下运行 。
#arm-linux-strip gdbserver
阅读(608) | 评论(0) | 转发(0) |