实验二:交叉编译环境的建立一.实验目的通过本实验,使学生掌握交叉编译环境的建立,了解在S3C2410平台上交叉编译的工作方式和原理。
二.实验原理和说明1、minicom 用法:minicom 是安装REDHAT 时安装的软件,它使用配置文件/etc/minirc.dfl,华恒光盘安装时会提供这个文件。
【注意】minicom 占用串口,能且仅能启动一个minicom,启动第二个时就会报错:Device /dev/modem is locked。
其中/dev/modem 就是/dev/ttyS0,即PC 机串口1,它是在光盘安装时执行./arminst 时创建的链接。
查看arminst 文件,可以看到如下一行: ln -sf /dev/ttyS0 /dev/modemminicom 所有的操作都以ctrl+A 开始,例如:退出为ctrl+A,松手后再按下Q,则弹出如下一个小框:选Yes 即可退出minicom。
minicom 中最重要的操作就是对其进行配置的修改。
这个操作要先ctrl+A,松手后按下o(是字母o,option 之意,不是零),则弹出如下框:选择第三项“Serial port setup”,则弹出下面框:键入E 则弹出如下框,可改变波特率:若要使用PC 机的串口2 来接开发板的串口1 做监控,则要在串口配置框中选择A,即“Serial Device”,则原来的配置框第一行进入编辑模式,将原来的/dev/modem 改为如下的:/dev/ttyS1,即串口2。
退出配置框只需连续按ESC 键即可返回。
2、HHARM9-EDU目录结构介绍安装过我们提供的光盘以下,会在您的PC机上建立一个HHARM9-EDU的目录。
在shell提示符下执行ls命令,可以显示整个PC上的目录结构:[root@…. root]# cd /[root@…. /]# lsHHARM9-EDU boot lost+found opt sbin usr dev home proc tftpboot var initrd misc root tmp bin etc lib mnt[root@….. /]#其中在PC机(宿主机)的根目录下安装了HHARM9-EDU的目录和opt目录,其中HHARM9-EDU是开发套件的源代码、驱动、以及相应的应用程序。
opt是ARM的编译器存放的目录。
进入HHARM9-EDU看看。
[root@……. /]# cd / HHARM9-EDU[root@HHARM9-EDU /] # lsImages applications kernel opt.tgz gprs-ppp minirc.dfl ppcboot-2.0.0 record-image SJF下面对以上目录作简单介绍:(1) /HHARM9-EDU/SJF/JTAG烧写工具源码目录,在该目录下执行make,即可生成JTAG烧写工具SJF2410,它就是我们通过JTAG烧写ppcboot要用到的文件。
(2) /HHARM9-EDU/ppcboot/bootloader源码目录,在该目录下简单的make即可生成HHARM9-EDU的bootloader - ppcboot.bin,可以通过修改这些源码来修改bootloader。
『说明』在嵌入式系统中,我们把引导系统的初始化部分的代码统称为bootloader,相当于PC机的BIOS。
但在我们提供的很多套件中,有的引导代码用的是ppcboot,有的是u-boot,有的是bootloader等等,但实际烧写到flash中的文件一般为ppcboot.bin、u-boot.bin、bootloader.bin等二进制代码文件。
(3)/HHARM9-EDU/kernel/Linux 内核源代码目录,以后如果改动内核后,若重新生成新的内核镜像文件zImage,就可以在此目录下执行make zImage。
(4) /HHARM9-EDU/application/应用程序目录,用户可参考此目录下的其它目录,其中添加自己的应用程序。
(5) /HHARM9-EDU/Images/其下是编译好的映像文件或者可执行文件,其中:zImage是编译好的内核文件,SJF2410是编译好的JTAG烧写工具,ppcboot是编译好的引导程序,ramdisk.image.gz是ramdisk 文件系统映像,cramfs.img是cramfs文件系统的镜像文件,jffs2.img是jffs2文件系统的镜像文件。
如果是用tftp下载相关的文件,请把相关文件放到/tftpboot目录下。
三.实验内容和步骤1、NFS的配置(1) NFS的配置:首先在REDHAT LINUX PC机上shell提示符[root@….]# 执行setup,弹出菜单界面后,选中:System services,回车进入系统服务选项菜单,在其中选中 [*]nfs ,然后退出setup 界面返回到命令提示符下。
vim /etc/exports将这个默认的空文件修改为只有如下一行内容:/ (rw) //即根目录可读写,/和(rw)之间要要留空格然后保存退出(:wq),然后执行如下命令:/etc/rc.d/init.d/nfs restart这样就一切OK了!【注意】默认情况下Linux启动时并不启动NFS服务,为了避免每次都要执行以下这一句: /etc/rc.d/init.d/nfs restart可以把此句写入PC机的脚本文件/etc/rc.d/rc.local中,PC机启动时会执行此文件,不用每次执行上面的那条命令来启动NFS。
配置完成后,可用如下办法简单测试一下NFS是否配置好了:PC机自己mount自己,看是否成功就可以判断NFS是否配好了。
例如在PC机的根目录下执行:(假定PC机的IP是192.168.2.122)mount 192.168.2.122:/ /mnt然后到/mnt/目录下看是否可以列出所指定的IP的机器(可以是本机,当然可以测试其它机器是否可以被mount)根目录(/)下的所有文件和目录,可以则说明mount成功,NFS 配置成功。
2、TFTP服务的配置:TFTP服务只在第一次使用时需要配置,以后其开机自己运行。
在PC机上执行setup,选择System services,将其中的tftp一项选中(出现 [*]表示选中),并去掉ipchains和iptables两项服务(即去掉它们前面的*号)。
然后还要选择Firewall configuration,选中No firewall。
【注意】setup里面的防火墙显示永远都是HIGH,这个是REDHAT一直的一个小BUG,即使你安装时默认选择了NO FIREWALL,setup里面也照样会显示防火墙设置是HIGH的,这个可以不必理会。
只要你选择了一次NO FIREWALL就可以了。
最后,退出setup,执行如下命令以启动TFTP服务:service xinetd restart配置完成后,建议简单测试一下TFTP服务器是否可用,即自己tftp自己,例如在PC机上执行:cd /cp /etc/inittab /tftpboot/ /*随便拷贝一个文件到/tftpboot目录下以供下面使用tftp命令下载,如果在/tftpboot目录下没有下面使用get命令下载的文件,会提示您没有找到相关文件。
*/tftp 192.168.2.122tftp> get inittab若出现如下信息:Received 741512 bytes in 0.7 seconds就表示TFTP服务器配置成功了。
在根目录下就会在刚才下载的inittab文件存在了;若弹出信息说:Timed out,则表明未成功,或者用如下命令查看tftp服务是否开通:netstat -a|grep tftp若TFTP服务器没有配置成功,需要按照上述步骤重新检查一遍。
【注意】对于REDHAT7.2及以前的版本,需要使用linuxconf命令来配置NFS。
4、内核编译如果想编译可以在非X86系统的CPU中运行的可执行的程序,必须安装适合于此CPU体系结构的编译工具,也就是说不同的CPU体系结构用的编译器是不一样的,HHARM9-EDU使用的交叉编译的工具被放置到/opt/host/armv4l目录下。
GNU工具集armv4l-unknown-linux-gcc armv4l-unknown-linux-objcopy Armv4l-unknown-linux-gdb armv4l-unknown-linux-as armv4l-unknown-linux-objdump Armv4l-unknown-linux-gasp armv4l-unknown-linux-ld armv4l-unknown-linux-strip Armv4l-unknown-linux-size armv4l-unknown-linux-g++ armv4l-unknown-linux-nm Armv4l-unknown-linux-addr2line armv4l-unknown-linux-cc1 armv4l-unknown-linux-ararmv4l-unknown-linux-cpp armv4l-unknown-linux-ranlibarmv4l-unknown-linux-cc1plus armv4l-unknown-linux-stringscd /HHARM9-EDU/kernelmake menuconfig则出现如下界面,可逐项对内核和驱动模块进行选择和配置:可见内核版本为:Linux Kernel v2.4.18-rmk7-pxa1一些关键的设置:System Type --->(S3C2410-based) ARM system type--- S3C2410 Implementation[*] SMDK (MERI TECH BOARD)[*] change AIJI< > S3C2410 USB function support--- Processor Type[*] ARM920T CPU idle[*] ARM920T I-Cache on[*] ARM920T D-Cache on[ ] Force write through caches on ARM920T[ ] Support Thumb instructions (experimental)完成自己的设置后,退出,保存配置,然后执行make zImage即可编译生成自己定制的内核映像文件zImage,此文件会被复制到/tftpboot/目录下以供烧写。