powerpc交叉编译环境的搭建
1:安装虚拟机
2:在虚拟机上装kubuntu8.10(经测:ubuntu9.10及9.04版安装交叉编译器ltib时rpm-build包装不了, redhat命令有些区别平时用得不习惯,对ubuntu比较熟,所以选择kubuntu。据说Ubuntu8.04也可装,未测)
Ethernet方式选: bridge
开启root, 设置root密码:$ Sudo passwd root
用户密码: $ passwd usrname
虚拟机与winxp之间文件共享:
(1)vmware-tools 中的hgfs此处不支持kubuntu
(2) file manigerànetworkàsamba server的smb栏:smb://192.168.0.120(120是我本机dhcp分配的地址),只要虚拟机能桥接到主机上网,网络是通的就能看见winxp上设置的共享文件夹,winxp上设置共享文件夹是开启读写权限时,虚拟机与主机能互传文件。
(3) openssh
3:安装vmware-tool;
虚拟机上:VM-àinstall vmware-tool,
Terminal:
$ sudo mkdir /mnt/cdrom
$ sudo mount /dev/cdrom /mnt/cdrom
$ ls /mnt/cdrom/
$ cp –a /mnt/cdrom/*.* /tmp
$ cd /tmp
$ ls
$ tar –zxvf VMware-tool…….tar
$ cd vmware-tool-distrib
$ sudo ./vmware-tools-install.pl
一路enter下去
$ reboot (sudo shutdown –r now)
4: 交叉编译环境的搭建
4.1: LTIB (Linux Target Image Builder) 是可以为各种不同的平台开发和配置BSPs (Board Support Packages)的小工具。使用这个工具,用户能够为他所需的嵌入式平台开发一个GNU/Linux镜像。 Freescale公司对于不同的平台提供了不同的LTIB。使用它们,本来很麻烦的移植u-boot 、移植linux内核、制作文件系统就变得很简单了。只需要进行一些配置,LTIB就能帮我们完成其余的工作。
4.2: 安装包下载:
(1)从公司服务器192.168.0.10的tools目录下载交叉编译环境所需要的镜像文件: MPC8315ERDB_20080627-ltib.iso
(2)http://www.freescale.com/webapp/sps/site/overview.jsp?nodeId=02VS0l320822D00332
打开这个网址,就可以看到Freescale提供的所有BSP(Linux Board Support Packages)。下载所对应的芯片型号的开发包就可以了,是一个几百兆的iso。
4.3: 镜像装入光驱后:
$ sudo mount /dev/cdrom /mnt/cdrom
然后执行安装,这里最好降为普通用户,不然会报错。参考命令如下:
$cd /mnt/cdrom
$./install
中间会有提示,输入'Y'接受install,回答'yes' 接受 EULA,还会问你安装到哪个目录,我选择的是我的home目录/home/yhguo2010/,
安装完成之后,在我们刚刚安装到的目录下,会生成一个MPC8315ERDB_20080627-ltib的目录,切换到MPC8315ERDB_20080627-ltib目录下,我们把它改为ltib目录,命令如下:
$cd /home/yhguo2010
$mv MPC8315ERDB_20080627-ltib ltib
进入ltib目录下,有一个执行文件,叫ltib
配置ltib
$./ltib –c(或直接./ltib, 以后编译的时候临时配置也行)
也可以使用./ltib –h来获得帮助
这一部可能会出现两个问题:
1:提示有些包没装,那么就安装相应的包。
glibc-devel 0 not installed
libstdc++ 0 not installed
gcc-c++ 2.96 not installed
zlib-devel 0 not installed
rpm 0 not installed
rpm-build 0 not installed
ncurses-devel 0 not installed
m4 0 not installed
bison 0 not installed
patch 0 not installed
如果直接用apt-get install这些工具,会有一半的工具提示找不到。为了找齐包含这些工具的软件包,我翻遍了google上能搜到的国外网站,痛苦啊。
我将所需要安装的这些软件包列举如下:
apt-get install m4
apt-get install bison
apt-get install patch
apt-get install build-essential
apt-get install libncurses5-dev
apt-get install zlib1g-dev
apt-get install rpm
2: 由于安装ltib需要是普通用户身份,但部分命令要超级用户权限才行,所以需要执行visudo增加普通用户的权限,按照它给出的提示进行如下操作:
#/usr/sbin/visudo(由于这个还不好保存,可用$ sudo vi /etc/sudoers)
根据提示,在usr priviledge后添加以下内容,yhguo2010是我的用户名:
yhguo2010 ALL = NOPASSWD: /bin/rpm, /opt/freescale/ltib/usr/bin/rpm
安装过程有相当得一段时间,现在可以先去喝杯咖啡了。
5:使用LTIB进行嵌入式Linux开发
1:在上一步中,如果没有出现什么意外,应该会出现一个LTIB的菜单方式的配置菜单,里面没什么复杂的选项,按照需求选择就可以了。如果选择了配置内核,还会出现内核的配置菜单。按需求配置好后,保存退出,十多分钟过去后,LTIB就会生成相应的uboot、内核和文件系统了。
2: 有时候,我们的开发板的硬件环境不一定和LTIB的设置一样。比如使用的Flash不一定一样、LocalBus的设置也不一定一样。那我们可以将LTIB生成的源代码拷贝出来自己修改后再make。方法是观察到LTIB将解压的内核或uboot源代码解压并打补丁之后(注意 一定要在打补丁之后)按Ctrl+c终止,这样就可以在/ltib/rpm/build/下面找到源代码了。如果不按Ctrl+c终止的话,LTIB再生成image后有可能会把源代码给删掉。
3: 安装好LTIB后,交叉编译环境也就建立起来了,若想使用powerpc-linux-gcc自动补全功能,需# vi /etc/bash.bashrc,在最后添加一句:export PATH=/opt/freescale/usr/local/gcc-4.1.78-eglibc-2.5.78-1/powerpc-e300c3-linux-gnu/bin/:$PATH。也就是是添加一个环境变量即可。
3-5:用普通用户登录,配置普通用户的的环境变量:
$vi ~/.bashrc
在这个文件下添加如下:
export LTIB_PATH=$HOME/ltib(这是我们交叉编译所在的目录)
export CONFIG_SITE=$HOME/zion/software/zion/build/config_ppc.site(工程所在的目录)
export PATH=/opt/freescale/usr/local/gcc-4.1.78-eglibc-2.5.78-1/powerpc-e300c3-linux-gnu/bin:$PATH(这个目录是我们安装交叉编译器的时候自动生成的)。
6:下载我们的工程,我们用svn来进行版本控制,如果你所在的linux没有svn的话,安装svn客户端,不用配置:
$sudo apt-get install subversion
进入普通用户的目录下,用svn下载工程:
进入/home/yhguo2010/zion
[yhguo2010@~] $svn checkout https://192.168.0.20/svn/zion zion
如果更新了我们的工程,进入我们的工程目录,用如下命令进行更新:
进入/home/yhguo2010
[yhguo2010@localhost] $svn update
如果你更新了工程的某个文件,那么你要提交你所更新的文件,用如下命令进行提交:
进入/home/yhguo2010/zion目录
[yhguo2010@llocalhost] $svn commint
5.编译项目和在板子上测试项目
1:配置tftp
配置tftp服务的步骤:
1-1、安装相关软件包:tftpd(服务端),tftp(客户端)
sudo apt-get install tftpd tftp
1-2、建立配置文件
在/etc/xinetd.d/下建立一个配置文件tftp
sudo vi tftp
在文件中输入以下内容:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
保存退出
1-3、建立tftp服务文件目录(上传文件与下载文件的位置),并且更改其权限
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot -R
1-4、重新启动服务
/etc/init.d/tftp restart
至此tftp服务已经安装完成了,下面可以对其进行一下测试。(假设在当前目录下有一个测试文件test.txt)
$tftp 127.0.0.1
tftp> put test.txt
Sent 1018 bytes in 0.0 seconds
tftp> get test.txt
Received 1018 bytes in 0.1 seconds
tftp> quit
$
通过get命令,可以把当前目录下的test.txt文件,通过tftp上传到它的服务文件目录。这时,在/tftpboot下面会出现test.txt文件。通过put命令,可以从/tftpboot下,下载test.txt文件。这样就验证了tftp服务配置的正确性。当文件上传与下载结束后,可以通过quit命令退出。
2:配置nfs服务器
2-1、安装nfs
Ubuntu上默认是没有安装nfs服务器的,因此我们首先安装nfs服务器端:
$ sudo apt-get install nfs-kernel-server
在一些文档中,提出还需要使用apt-get来手动安装nfs的客户端nfs-common,以及端口映射器portmap,但其实这是没有必要的,因为在安装nfs-kernel-server时,apt会自动为我们把它们安装好。
2-2、配置/etc/exports
nfs允许挂载的目录及权限在文件/etc/exports中进行了定义。
例如,我们要将根目录下的rootfs目录共享出来,那么我们需要在/etc/exports文件末尾添加如下一行:/rootfs *(rw,sync,no_root_squash)
其中:/rootfs是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限,sync是资料同步写入内存和硬盘,no_root_squash是nfs客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root权限。
这里,我们要将/tftpboot/ltib目录, 让192.168.0.*的IP共享:
/tftpboot/ltib 192.168.0.*(rw, sync, no_root_squash, no_subtree_check)
其它nfs常用的参数有:
ro 只读访问
rw 读写访问sync 所有数据在请求时写入共享
async nfs在写入数据前可以响应请求
secure nfs通过1024以下的安全TCP/IP端口发送
insecure nfs通过1024以上的端口发送
wdelay 如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay 如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置。
hide 在nfs共享目录中不共享其子目录
no_hide 共享nfs目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的GID
2-3、重启服务
$ sudo /etc/init.d/nfs-kernel-server restart
2-4、测试nfs
此时可以运行以下命令来显示一下共享出来的目录:
#showmount -e
或者可以使用以下命令把它挂载在本地磁盘上,例如将/rootfs挂载到/mnt下:
#mount -t nfs localhost:/rootfs /mnt
可以运行df命令查看是否挂载成功。查看后可以使用以下命令卸载:
# umount /mnt
严格按照以上步骤配置tftp服务,一般都可以成功。如果出现无法get或者put的时候,可以查看一下防火墙是否关闭。
3.Minicom 工具
安装:
sudo apt-get install minicom
配置:
1 . 在终端中输入minicom以启动minicom;
2. 先按下Ctrl + a, 放开, 再按o, 出现配置菜单.
3. 选择 Serial port setup, 此时所示图标在“Change which setting”中,键入“A”,此时光标移到第A项对应处:串口COM1对应ttyS0, COM2对应ttyS1. (注意选择)
对波特率,数据位和停止位进行配置,键入“E”,波特率选为115200 8N1 (奇偶校验无, 停止位1),硬/软件流控制分别键入“F”“G”并且都选NO。在确认配置正确之后,可键入回车返回上级配置界面,并将其保存为默认配置。(即save setup as dfl),之后重启minicom是刚才配置生效,在连上开发板的串口线后,就可在minicom中打印正确的串口信息了。
这时候可以打印串口的信息了,但是在通过串口用xmodem协议烧写内核时会提示没有xmodem协议。
所以还必须安装软件包:lrzsz
sudo apt-get install lrzsz
这时候就可以正常地用minicom通过串口烧写内核了。
3:通过网络启动把我们的工程代码下载到板子上,但是必须保证你的系统已经配置好ftp服务器,然后再终端设置。
3-1:设置服务器的IP地址,参考命令如下:
setenv serverip IP地址
3-2: 设置板子的IP地址和子掩码,还有网关,参考命令如下:
setenv ipaddr IP地址
setenv ethaddr 子掩码
setenv gatewayip 网关
挂载u-boot,uImage,参考命令如下:
bootargs=root=/dev/nfs rw nfsroot=192.168.0.169:/rootfs/1 ip=192.168.0.188:192.168.0.103:192.168.0.1:255.255.255.0:mpc8315eRDB:eth0:off
bootcmd=tftp 2000000 uImage;tftp 600000 128-32.dtb;bootm 2000000 – 600000
然后保存我们的设置,命令如下:
saveenv
3-4:把内核镜像拷贝到tftpboot目录下和把文件系统拷贝到nfs目录下。
3-5:在终端中启动我们的工程,命令如下:
Boot
3-6:在终端进入我们的项目目录,编译我们的工程,参考命令如下:
cd /zion/software/zion/
$./debugconfppc && make clean && make
这时会在zion/software/zion/control/下生成一个可执行文件:
zion_main
把zion_main文件拷贝到zion/software/ca_dvr_project 目录下
cp –r zion_main ../ca_dvr_project
进入zion/software/ca_dvr_project目录下,启动我们的工程
./ca_dvr_start
然后就可以进行测试…