分类: 嵌入式
2010-12-01 22:21:24
嵌入式linux软件系统由bootloader、kernel、root filesystem构成,如下:
Bootloader(一次固化)+内核(多次更新)+根文件系统制作
将linux_platform.tar.gz文件拷到/home目录下,并解压
# cd /home/linux_platform/host
安装以下交叉编译工具:
2.95.3: 用于编译vivi
#mkdir –p /usr/local/arm
#tar zxvf arm-linux-gcc-2.95.3.tar.gz –C /usr/local/arm
#tar zxvf arm-linux-gcc-
其中
#vi ~/.bashrc
#export PATH=/usr/local/arm/
#cd /home/linux_platform/target/bootloader
#tar zxvf vivi_unsp.tar.gz
#cd vivi-unsp
#make distclean
#cp sapp-unsp40.config .config
#make menuconfig //编译一些宏
由于采用的是配置好的脚本,因此不用做任何修改,直接保存退出即可
#make
在当前路径下会生成 vivi 的二进制文件。
#cp vivi /home/linux_platform/image/my_vivi
将生成的vivi镜像拷贝到image目录下,并改名为my_vivi
#cd /home/linux_platform/target/bootloader/
#tar zxvf u-boot_unsp.tar.gz
#cd u-boot_unsp
#make distclean
#make unsp2440_config
#make
在当前目录下会生成一个u-boot.bin的文件
将生成的u-boot镜像拷贝到image目录下,并改名为my_u-boot.bin
将tools目录下生成的mkimage文件拷贝到/bin目录中,后面用于制作u-boot所需格式的内核
#cp u-boot/tools/mkimage /bin
#cd /home/linux_platform/target/kernel
#tar zxvf linux-
#cd linux-
#make distclean
#cp sapp-unsp40.config .config
#make menuconfig
跟vivi类似,由于采用的是配置好的脚本,因此不用做任何修改,直接保存退出即可。
#make zImage
在/arch/arm/boot下会生成zImage文件
在此目录下执行以下命令:
#mkimage -n 'linux-
会在当前路径下生成uImage.img这个文件
#cp /arch/arm/boot/zImage /home/linux_platform/image/my_zImage
#cp /arch/arm/boot/uImage.img /home/linux_platform/image/my_uImage.img
将生成的zImage镜像拷贝到image下,并改名为my_zImage (vivi启动所需的内核)
将生成的uImage镜像拷贝到image下,并改名为my_uImage.img (u-boot启动所需的内核)
1) cramfs格式的文件
cramfs格式的根文件系统为只读文件系统,大小压缩了一倍。cramfs是可逆的文件系统,即我们可以将其压成镜像,也可以将其从镜像中解压出来。
#tar zxvf cramfs-1.1.tar.gz //编译cramfs根文件系统制作工具
#cd cramfs-1.1
#make
会在当前路径下编译得到两个工具:mkcramfs cramfsck
#cp mkcramfs cramfsck /bin //将两个工具拷贝到根目录的/bin下
其中mkcramfs用来生成cramfs格式的根文件系统
cramfsck用来将已生成的根文件系统释放为文件夹
2)yaffs格式的文件
yaffs格式的根文件系统是可读可写的文件系统,没有经过压缩,是不可逆的。
#tar zxvf yaffs2.tar.gz
#cd yaffs2/utils
#make //会产生mkyaffsimage
#cp mkyaffsimage /bin //将生成的工具拷贝到bin目录下
#cd /home/linux_platform/target/root_26
#tar zxvf rootfs_noGUI.tar.gz //解压不带QT库的根文件系统
# mkcramfs rootfs_noGUI/ rootfs_noGUI.cramfs
//将刚才解压出来的根文件系统制作成cramfs格式的镜像
#mkyaffsimage rootfs_noGUI/ rootfs_noGUI.yaffs
#cp rootfs_noGUI.cramfs /home/linux_platform/image/
#tar zxvf rootfs_GUI.tar.gz
# mkcramfs rootfs_GUI/ rootfs_GUI.cramfs
//制作带GUI界面的根文件系统
#mkyaffsimage rootfs_GUI/ rootfs_GUI.yaffs
#cp rootfs_GUI.cramfs /home/linux_platform/image/
前面已经生成了构建嵌入式开发平台所需的所有文件,下面讲解将其更新到开发板中。
1) FLASH中没有任何信息(即开发板为裸板)时:
如果开发板中已经烧有vivi,则直接跳过此步,直接进行第2步:
使用LSJF24X0、H-JTAG烧写工具烧写vivi:
2) 板子中已经正确烧有vivi:
在超级终端中:使用
load flash vivi x(下载image下my_vivi)
load flash kernel x(下载image下my_zImage)
load flash root x(下载cramfs格式的文件系统)
/load yaffs root x(下载yaffs格式的文件系统)
分别将前面编译得出的镜像烧入开发板中,以启动我们的开发板。
3)根文件系统中已经做好了boa服务器、telnet服务器、QT图形库(带GUI含有)
可以设置开发板的IP地址,在PC机上通过虚拟机访问开发板,观察boa服务器的现象。
在dos下通过telnet客户端连接开发板管观察现象。
如果烧写的是带QT的图形库,我们可以启动2440 /home下的QT测试程序
前面已经生成了构建嵌入式开发平台所需的所有文件,下面讲解将其更新到开发板中。
1) FLASH中没有任何信息(即开发板为裸板)时:
如果开发板中已经烧有vivi或u-boot,则直接跳过此步,直接进行第2步:
使用LSJF24X0、H-JTAG烧写工具烧写u-boot:
烧写我们前面编译好的 my_u-boot.img
2) 假设开发板中已经有了vivi
使用vivi更新u-boot
#load flash vivi x
注意,这里跟前面不一样,传送文件的时候选择my_u-boot.bi文件进行传送
至此开发板中已经烧入了我们编译出的u-boot,重启开发板,显示界面变成了u-boot的启动界面:
3) 下面我们学习使用u-boot更新系统
u-boot提供了通过网络下载的功能:
网络命令(需用交叉线连接电脑与开发板)
#ping 192.168.220.x(电脑主机IP)
//测试是否联通PC机上启动TFTP服务器
//如果可以连通启动TFTP+DHCP_Server/下的tftpd32.exe
将我们前面编译出的imag文件夹中的文件拷到TFTP+DHCP_Server/目录下
//下面的名字需换成我们编译的名字
更新内核:
#tftp 0x30000000 172.20.223.63:uImage.img //此处能显示文件系统大小
#nand erase 0x50000 0x300000
#nand write 0x30000000 0x50000 xxxx(此大小填入文件系统的实际大小,tftp下载完成后,会给出其大小)0x300000
更新cramfs根文件系统
#tftp 0x30000000 172.20.223.63:rootfs.cramfs
#nand erase 0x350000 0x3cac000
#nand write 0x30000000 0x350000 xxxx(此大小填入文件系统的实际大小,tftp下载完成后,会给出其大小)
更新yaffs根文件系统
#tftp 0x30000000 172.20.223.63:rootfs.yaffs
#nand erase 0x350000 0x3cac000
#nand write.yaffs2 0x30000000 0x350000 xxxx(此大小填入文件系统的实际大小,tftp下载完成后,会给出其大小)
(此数字必须是528的整数倍)
重启
#boot //是否能引导操作系统起来
u-boot还提供了通过USB主的功能,可以把镜像文件拷入U盘中,然后烧写镜像:
1. 插入U盘(经测试<=4G的U盘可以正常识别,8G以上U盘暂时无法识别)
2. 在U-boot目录下敲入以下命令
#usb start
unsp2440 # usb start
(Re)start USB...
USB: scanning bus for devices... 4 USB Device(s) found
scanning bus for storage devices... 1 Storage Device(s) found
#usb tree
Device Tree:
1 Hub (12 Mb/s, 0mA)
| OHCI Root Hub
|
+-2 Hub (12 Mb/s, 64mA)
| | Standard USB Hub
| |
| +-3 Mass Storage (12 Mb/s, 100mA)
| SanDisk Cruzer Slice 0878101D5F51B353
|
+-0 See Interface (12 Mb/s, 0mA)
#fatinfo usb 0:1
Interface: USB
Device 0: Vendor: SanDisk Rev: 8.02 Prod: Cruzer Slice
Type: Removable Hard Disk
Capacity: 3813.7 MB = 3.7 GB (7810559 x 512)
Partition 1: Filesystem: FAT32 "NO NAME "
#fatls usb 0:1 //可以显示当前U盘所有目录及文件信息
unsp2440 # fatls usb 0:1
mds/
recycler/
qt_test/
u-boot.bin
#fatload usb 0:1 0x30000000 u-boot.bin //下载指定文件镜像
reading u-boot.bin
........................
256220 bytes read
其余操作跟网络下载相同