搭建交叉开发环境

本文详细介绍了如何在Ubuntu系统中搭建ARM交叉开发环境,包括下载相关文件、生成编译工具、配置编辑工具、裁剪和编译内核、制作根文件系统映像文件以及建立NFS环境的步骤。主要涉及的工具有gcc、vim、ctags以及BusyBox,并提供了具体的命令行操作指导。

一、搭建交叉开发环境

**课件存放在服务器目录/opt/mirror/downloads/ppt,用下列命令下载:

$ scp teacher@192.168.5.195:/opt/mirror/downloads/ppt/* ./

1、生成编译工具:
以用户userxx登录图形桌面(其中xx表示你的学好后两位,比如user50),打开终端并切换到超级用户
$ sudo -s; 切换到超级用户
# scp teacher@192.168.5.195:/opt/mirror/downloads/sources.list /etc/apt/
# apt-get update
# apt-get -f install; 解决历史遗留问题;
# apt-get -y install build-essential; --安装C语言开发环境
# apt-get -y install bison flex patch
# rm -rf /opt/crosstool && mkdir -p /opt/crosstool; --编译之后的交叉工具链放在这里呢。
# chown userxx /opt/crosstool; --使用户userxx对目录/opt/crosstool可写。
# apt-get -y install gcc-3.4; --由于ubuntu 9.04默认安装的gcc版本太新了,所以需要再安装一个较低版本的gcc。
# cd /usr/bin
# rm gcc
# ln -sv gcc-3.4 gcc; --使gcc指到较低版本的编译器。

# exit; --退出到普通用户userxx
$ cd
$ sudo -s
# chown -R userxx downloads
# exit
$ cd && rm -rf downloads && mkdir downloads && cd downloads; --这个就不用解释了吧。
$ scp teacher@192.168.5.195:/opt/mirror/downloads/crosstool-0.43/* .
密码123456
$ tar -zxf crosstool-0.43.tar.gz && cd crosstool-0.43; --解压并进入解压后的目录。
$ ./demo-arm-xscale.sh; --赶快运行这个脚本吧(如果你的开发板不是xscale,那么就不要运行这个脚本了,你列一下文件demo-arm*,找到适合于你自己开发板的脚本并运行),这个脚本完成以下工作:1)下载需要的软件包(所有的包被下载到目录~/downloads下),2)编译(时间较长),3)安装工具链(到 /opt/crosstool下)。

编译完了,没有报错了,那恭喜你,还等什么,赶快清点战果呀
$ cd /opt/crosstool
$ ls -la
drwxr-xr-x 3 wochi wochi 4096 2009-10-22 21:43 gcc-4.1.0-glibc-2.3.2
$ cd gcc-4.1.0-glibc-2.3.2
$ ls -la
drwxr-xr-x 12 wochi wochi 4096 2009-10-22 21:33 arm-xscale-linux-gnu
$ cd arm-xscale-linux-gnu
$ ls -la
drwxr-xr-x 11 wochi wochi 4096 2009-10-22 21:23 arm-xscale-linux-gnu
-rw-r--r-- 1 wochi wochi 1007 2009-10-22 21:02 arm-xscale-linux-gnu.crosstoolconfig.txt
drwxr-xr-x 2 wochi wochi 4096 2009-10-22 21:33 bin
drwxr-xr-x 3 wochi wochi 4096 2009-10-22 21:33 distributed
drwxr-xr-x 3 wochi wochi 4096 2009-10-22 21:33 include
drwxr-xr-x 2 wochi wochi 4096 2009-10-22 21:33 info
drwxr-xr-x 3 wochi wochi 4096 2009-10-22 21:33 lib
drwxr-xr-x 3 wochi wochi 4096 2009-10-22 21:33 libexec
drwxr-xr-x 4 wochi wochi 4096 2009-10-22 21:33 man
drwxr-xr-x 2 wochi wochi 4096 2009-10-22 21:33 share
drwxr-xr-x 2 wochi wochi 4096 2009-10-22 21:33 tmp

--怎么样?硕果累累了吧,这里有交叉编译工具、库、头文件和帮助文档,一应俱全,但是还别急,最后还要定义一个环境变量。
在文件~/.bashrc的末尾增加一行:
export PATH=/opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-xscale-linux-gnu/bin:$PATH
具体操作是:
$ cd && vim .bashrc

然后执行命令:
$ cd && . .bashrc
或者你重新登录userxx,这样交叉编译工具所在的目录就放在环境变量PATH的最前面了,如果重新登录也不会,你干脆重启电脑好了。

测试:
$ vim abc.c; --编辑一个c语言程序abc.c, Hello World一下先。
#include <stdio.h>
main()
{
printf("Hello World!/n");
}

$ arm-xscale-linux-gnu-gcc abc.c -o abc; --编译产生可执行程序abc
$ ./abc; --什么?你就想运行!这肯定失败!!难道你忘了,abc只能下载到目标板上运行的啊,这就是交叉编译环境的根本,在电脑上写程序并编译,只能在目标板上运行,烦吧,简直烦死人了,谁叫你从事这一行呢,认命吧。
$ file abc; --看看这个程序的类型:
abc: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.4.18, not stripped

看到了吧,这是一个可执行程序,但是是ARM目标板的。

$ sudo -s
# cd /usr/bin && rm gcc && ln -sv gcc-4.3 gcc
$ exit

2、配置编辑工具:
1、vim
   ubuntu 9.04 desktop默认安装的是一个小型vi编辑工具,编程人员需要用到的很多功能没有,需要安装全功能的vim,方法如下:
$ sudo -s
# apt-get -y install vim-full vim-common
# exit
$ cd && vi .vimrc; --输入如下内容:
set autoindent
set cindent
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
set nowrap
syntax enable
set ts=4
set hlsearch
set ruler
set showcmd
set nu

--这样编辑程序时高亮语法显示、自动缩进等等,非常方便。

2、ctags
   ctags配合vim工具,可以实现c语言源代码树的快速浏览编辑
# apt-get -y install exuberant-ctags
--然后进入源码树的根,执行命令:
# ctags -R *; --这样就生成了标签文件tags,然后使用vim打开文件,采用vim命令:
光标停在一个关键字上(比如函数名),然后ctrl+]跳到此函数的具体定义代码,按ctrl+t返回。一些常用的命令是(光标先移到要跟踪的标帜符上):ctrl+](直接跳转到第一个标记处),g ctrl+](列出当前光标处单词的所有标记并提示跳转),:tags(列出所有已查询标记);:ts <tag>(列出所有标记tag的出处并提示选择跳转),ctrl+t(返回到前一个被查询过的标记)。

3、vim使用技巧:
删除 DOS 回车符 ^M::%s//r//g
删除行尾空格:%s= *==g
删除行尾空格和 DOS 回车符:%s#/s*/r/?$##
压缩多行空行为一行:%s/^/n/+//r/
普通替换:%s/fred/joe/igc
删除所有的空行:光标移到首行,一次输入!Ggrep -v "^$"


二、裁剪和编译内核:

$ sudo -s
# apt-get -y install libncurses5-dev
# exit
$ cd
$ scp -r teacher@192.168.5.195:/opt/mirror/downloads/kernel ./
$ cd kernel && tar -xjf linux-2.6.28.tar.bz2
$ cd linux-2.6.28
$ make ARCH=arm CROSS_COMPILE=arm-xscale-linux-gnu- mainstone_defconfig menuconfig
$ make ARCH=arm CROSS_COMPILE=arm-xscale-linux-gnu-;  --开始编译内核,时间较长。
编译后的内核zImage格式存放在目录arch/arm/boot/下,vmlinux格式在arch/arm/boot/compressed/下。如果编译成功那么在这两个目录下可以找到
相应的内核文件。绝对路径是:
/home/userxx/kernel/linux-2.6.28/arch/arm/boot和/home/userxx/kernel/linux-2.6.28/arch/arm/boot/compressed/

三、制作根文件系统映像文件:

$ sudo -s
# apt-get build-dep busybox
# exit
$ cd
$ scp -r teacher@192.168.5.195:/opt/mirror/downloads/rootfs ./
$ cd rootfs && tar -xjf busybox-1.2.0.tar.bz2
$ cd busybox-1.2.0
$ make menuconfig; ----配置
  Busybox Settings --->
      Buid options --->
        [*] Build BusyBox as a static binary (no shared libs)
        (arm-xscale-linux-gnu-) Cross Compiler prefix

      Installation Options --->
        (./_install) BusyBox installation prefix

$ make; ----编译
$ make install; -----安装到目录_install/
构建根文件系统目录树
$ cd _install
$ mkdir -p etc/init.d dev proc tmp lib sys
$ cd dev
$ sudo mknod console c 5 1
$ sudo mknod null c 1 3
$ sudo mknod zero c 1 5
$ cd ../
$ cat > etc/inittab <<EOF
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
EOF

$ cat > etc/init.d/rcS <<EOF
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
ifconfig lo 127.0.0.1
ifconfig eth0 192.168.0.100
EOF
$ chmod +x etc/init.d/rcS

创建根文件系统映像文件
$ cd ~/rootfs/busybox-1.2.0/_install
$ find . | cpio -o -H newc > ../initrd.cpio
$ cd ..
$ gzip initrd.cpio

四、建立NFS环境:

1、服务器安装软件:
# apt-get install nfs-kernel-server
# vim /etc/exports; ----把下列一行加到文件的末尾:
/home/userXX/rootfs/busybox-1.2.0/_install *(rw,sync,no_root_squash)
---注意/home/userXX/是你的家目录,要根据实际填写,用命令finger userXX可以查看用户userXX的家目路。
# /etc/init.d/nfs-kernel-server restart

2、在自己的电脑或其他电脑上mount服务器输出的目录:
# mkdir /opt/abc; ----随便创建一个空目录
# mount <server ip>:/home/userXX/rootfs/busybox-1.2.0/_install /opt/abc
# cd /opt/abc;


# umount /opt/abc; ---用完了就可以卸载

五、移植WEB环境:

$ scp teacher@192.168.5.195:/opt/mirror/downloads/ppt/boa-0.94.13.tar.gz ./
$ tar -zxf boa-0.94.13.tar.gz
$ cd boa-0.94.13/src
$ ./configure
$ sed -i 's|foo##->tm_gm|foo->tm_gm|g' compat.h
$ sed -i 's|drop_privs();|//drop_privs();|g' boa.c
$ make
# cp boa /usr/sbin/
# mkdir /etc/boa
# vim /etc/boa/boa.conf; --加入以下内容:
Port 80
DocumentRoot /var/www
DirectoryIndex index.html
MimeTypes /etc/mime.types
DefaultType text/plain
ErrorLog /var/log/boa/error_log
CGIPath /bin:/usr/bin:/usr/local/bin
ScriptAlias /cgi-bin/ /var/www/cgi-bin/

# mkdir -p /var/www /var/log/boa /var/www/cgi-bin
# cp <可执行程序> /var/www/cgi-bin; ---把你编译后的程序拷贝过去
# boa ; ----start the boa server
在浏览器中输入地址http://localhost/cgi-bin/<程序名>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值