安装交叉编译工具链和u-boot,内核,文件系统的简单编译

一.安装交叉编译工具链

将工具链解压到的一个合适的文件夹下(/opt/)
修改/etc/profile 添加该工具链命令所在路径
source /etc/profile
(或者 修改/etc/bashrc 可以立即生效)

二.u-boot的配置,编译

解压源码u-boot-1.1.6.tar.bz2到当前文件夹

修改include/configs/smdk6410.h
#define CONFIG_BOOT_NAND //1
#define CONFIG_BOOT_MOVINAND //2
选择一个,如果是nand启动,则选择1,sd卡启动,选择2

修改CONFIG_BOOTCOMMAND等可以在以后的配置中减少节省配置步骤。
以下选项可根据需要配置
#define CONFIG_BOOTDELAY 3
//fusq
//#define CONFIG_BOOTARGS     "root=/dev/mtdblock2 rootfstype=yaffs2 console=tty0 console=ttySAC0,115200"
#define CONFIG_BOOTARGS     "root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200"
#define CONFIG_ETHADDR 00:40:5c:26:0a:5b
#define CONFIG_NETMASK      255.255.255.0
#define CONFIG_IPADDR 192.168.1.20
#define CONFIG_SERVERIP 192.168.1.10
#define CONFIG_GATEWAYIP 192.168.1.1

还可以自定义修改#define CFG_PROMPT "[pika@nand]#"(能标注启动方式比较好,这样可以防止在PC操作时弄混)

修改Makefile
查找CROSS_COMPILE,找到export前面的CROSS_COMPILE,将等号右边的值改为arm-linux-(确保-之后没有空格)


make smdk6410_config


make


./mknand(./mkmovi)


编译好之后会在该目录产生了u-boot-nand.bin或者u-boot-sd.bin.
然后进行测试.
步骤在上一篇中已经讲过,不在多说.

三.编译内核:

修改Makefile
搜索CROSS_COMPILE ,修改其参数arm-linux-(同样,确保后面没有空格)
拷贝smdk6410_config为.config
make(如果PC为多核,可以用make -j4来加快速度)
注意编译过程
.c (-C)-> .o -> build-in.o -> vmlinux.o (LD)-> vmlinux
最终,在arch/arm/boot/ 产生一个zImage 就是我们要得到的内核(是已被压缩的)

如果没有smdk6410_config 文件怎么办?
1.可以拿arch/arm/configs/???.config来改。
2.如果这里也没有,我们可以通过make menuconfig来手工编译
我们可以进入System Type->ARM system type(Samsun S3C64XX)->

选中Samsung S3C64XX后退出到上级目录,

其他的可根据需要来修改(某些选项前面标注为M,表示编译为模块)
在配置好之后,在drivers/video/samsung/ 下可能产生一个会s3cfb_UT_LCD43C_D .c ,

.c前的空格去掉(这是三星的一个小问题)

然后make

四.编译文件系统

tar xvf busybox-1.13.3.tar.gz
进入解压后目录
make menuconfig 
进入Build Options
修改Cross Compiler prefix 前面括号的内容为arm-linux-
退出到上一级,进入Installation Options
确保BusyBox installation prefix 前的括号内有./install(如果没有要加上)
其他的可根据需要来修改


然后
make && make install
完成后我们会在_install中找到我们编译好的文件系统,


当然,这个系统并不完整,我们可以边测试,边修改可以把我们的我们的文件系统打包后我们建立一个新的nfs主目录中(testfs)配置在前一章已经说过了。


在主目录中添加 etc proc dev home lib mnt opt sys var sdcard等目录
现在,我们的库里还没有东西,我们可以从arm交叉编译工具链的库中拷贝过来(cp -f /opt/4.3.2/arm-none-linux-gnueabi/libc/lib/* /testfs/lib/)


在测试过程中,提示我们没有console设备,没有tty2,tty3,tty4等错误,我们可以根据主机上面的设备来添加我们的设备
ls -l /dev/console 我们可以看到console是一个字符型的设备,它的主设备号是5,次设备号是1,可以用以下命令创建


mknod /testfs/dev/console c 5 1
同样的方法,我们创建tty2,tty3,tty4
mknod tty2 c 4 2
mknod tty3 c 4 3
mknod tty4 c 4 4


我们的文件系统可以运行了,但是,还是少了点东西,在PC机上,我们可以在proc看到当前有那些进程在运行,在sys下能看到当前系统的一些东西,我们运行mount命令会看到一些挂载信息,我们可以看到proc 和 sys这两个文件夹也在里面
但在我们的开发板运行后,这两个文件夹里面空空的
我们可以初始化启动例程,vim /testfs/etc/init.d/rcS
在里面加入

mount -n -t proc none /proc
mount -n -t sysfs none /sys
mdev -s

当然,我们可以在之后加入一些欢迎信息等,这并非必要,这里就不再赘述。

至此,我们的文件系统的功能已经比较完整,我们可以根据需要在进行修改,比如,我们的系统如果支持USB,可以在rcS中加入
mount -n -t usbfs none /proc/bus/usb
等等


你可能感兴趣的:(arm)