Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152410
  • 博文数量: 43
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 601
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-22 17:24
文章分类
文章存档

2010年(43)

我的朋友

分类: LINUX

2010-11-30 19:24:43

11.30,内核,bootloader都是已经配置好的,就是走一个流程

11.30 第一天

(这两种对比着学)

构建嵌入式开发平台

嵌入式linux软件系统由bootloaderkernelroot filesystem构成,如下:

Bootloader(一次固化)+内核(多次更新)+根文件系统制作

linux_platform.tar.gz文件拷到/home目录下,并解压

(这个压缩包中事先已经集成了下面工作所要求的所有编译器,内核和bootloader

1.1 安装交叉编译器

# cd /home/linux_platform/host

安装以下交叉编译工具:

 2.95.3: 用于编译vivi

4.3.2:  用于编译u-boot内核、根文件系统、应用程序

#mkdir  p  /usr/local/arm

#tar  zxvf  arm-linux-gcc-2.95.3.tar.gz  C  /usr/local/arm

#tar  zxvf  arm-linux-gcc-4.3.2.tar.gz   C  /usr/local/arm

(解压后出现hostimagetarget

其中4.3.2需要假加入环境变量(此项工作前面应该已经做过)

#vi  ~/.bashrc

#export  PATH=/usr/local/arm/4.3.2/bin:$PATH

(相应的交叉编译器 用来编译相应的文件

(涉及到芯片的时候需要用到修改编译器)

(旧版本的编译兼容新版本的)

(比如 2.95.3 用来编译vivi,因为vivi本身比较老)

(用新版本的编译器编译vivi就会出错(详细做笔记)) 

(通常用4.3.2,因为4.3.2这个编译器比较完整,比较经典)

(哪个编译器起作用呢?其实在vivimakefile中已经写到了,所以不需要去修改环境变量了)

vivi中的makefile中直接写的就是环境变量的绝对路径)

(比如u-bootmplayer等中就没有写上,需要修改换将变量)

1.2 配置编译bootloader-------vivi

(在target中有vivi

#cd  /home/linux_platform/target/bootloader

#tar  zxvf  vivi_unsp.tar.gz (放的vivi的源码)

#cd   vivi-unsp 

#make  distclean   

#cp    sapp-unsp40.config  .config   (2440的一个配置文件)

#make  menuconfig


(这个里面改放的基本上都是条件编译的宏)

由于采用的是配置好的脚本,因此不用做任何修改,直接保存退出即可

(如果是自己重新做,需要 配置

#make

在当前路径下会生成 vivi 的二进制文件。

#cp  vivi  /home/linux_platform/image/my_vivi

将生成的vivi镜像拷贝到image目录下,并改名为my_vivi

1.3 配置编译u-boot

#cd  /home/linux_platform/target/bootloader/

#tar  zxvf  u-boot_unsp.tar.gz    

#cd  u-boot_unsp

#make distclean (彻底的清除)

#make unsp2440_config

#make

(因为和vivi的机制不一样,所以不需要去make menuconfig(作用是生成宏)

在当前目录下会生成一个u-boot.bin的文件

将生成的u-boot镜像拷贝到image目录下,并改名为my_u-boot.bin

tools目录下生成的mkimage文件拷贝到/bin目录中,后面用于制作u-boot所需格式的内核  (需要用这个工具区处理一下内核,这样才能启动内核)

#cp  u-boot/tools/mkimage  /bin

1.4 配置编译内核

#cd  /home/linux_platform/target/kernel

#tar  zxvf  linux-2.6.34.tar.bz2   

#cd   linux-2.6.34

#make distclean

#cp  sapp-unsp40.config .config

#make menuconfig

vivi类似,由于采用的是配置好的脚本,因此不用做任何修改,直接保存退出即可。

#make zImage

/arch/arm/boot下会生成zImage文件

在此目录下执行以下命令:

#mkimage  -n 'linux-2.6.34 -A arm  -O linux  -T kernel  -C none  -a 0x30008000  -e 0x30008000  -d zImage  uImage.img  (uimage是在zimage的基础上加了一个头,并没有改变内核的东西,只是能够在启动的时候显示出内核的版本信息)

会在当前路径下生成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启动所需的内核)

(以上就得到了两个内核)

zImage会直接被vivi来启动

(也可以直接生成uimage ,怎么生成?

(现在做的uimage是基于zimang做好来做的

1.5 根文件系统的制作(cramfsyaffs)(都是基于nand

1.5.1 准备编译工具:

1) cramfs格式的文件(压缩比二比1,只读的,做成产品

cramfs格式的根文件系统为只读文件系统,大小压缩了一倍。cramfs是可逆的文件系统,即我们可以将其压成镜像,也可以将其从镜像中解压出来。

(其实可以多分一些区,把某些特殊的文件夹做成yaffs的来方便用户去读写

#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(生成yaffs镜像的

#cp mkyaffsimage /bin  //将生成的工具拷贝到bin目录下 

1.5.2  生成不带GUI的根文件系统

#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/

(以上得到两个不带gui的,是两种格式

1.5.3 生成带GUI的根文件系统

#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/

(也是两个不同格式带gui

1.5.4 使用H-JTAG、串口更新系统(vivi)

前面已经生成了构建嵌入式开发平台所需的所有文件,下面讲解将其更新到开发板中。

1) FLASH中没有任何信息(即开发板为裸板)时:

如果开发板中已经烧有vivi,则直接跳过此步,直接进行第2步:

使用LSJF24X0H-JTAG烧写工具烧写vivi

2) 板子中已经正确烧有vivi

在超级终端中:使用

load  flash  vivi     x(下载imagemy_vivi

load  flash  kernel   x(下载imagemy_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.5.5 使用H-JTAG、串口更新系统(uboot)

前面已经生成了构建嵌入式开发平台所需的所有文件,下面讲解将其更新到开发板中。

(可以写个脚本集成到uboot中,uboot本身也支持自己添加一些命令

1) FLASH中没有任何信息(即开发板为裸板)时:

如果开发板中已经烧有viviu-boot,则直接跳过此步,直接进行第2步:

使用LSJF24X0H-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

u-boot提供了通过网络下载的功能:

网络命令(需用交叉线连接电脑与开发板)

#ping 192.168.220.x(电脑主机IP)

    //测试是否联通PC机上启动TFTP服务器

//如果可以连通启动TFTP+DHCP_Server/下的tftpd32.exe

将我们前面编译出的imag文件夹中的文件拷到TFTP+DHCP_Server/目录下

   //下面的名字需换成我们编译的名字

更新内核:

1.#tftp  0x30000000  172.20.223.63:uImage.img (这里需要u-boot中有ip,用printenv查看ipsetenv ipaddr 来修改自己的ipipaddr 

(1.先下到内存中0x300000000,(因为是64m,从30000000-???),2.从内存再到flash 

2.#nand  erase  0x50000  0x300000

(这里都是flash的地址,人们都约定好的,从5000开始)(nand需要先擦出, 才能再写,所以先擦出,擦了大概3-4m

3.#nand  write  0x30000000  0x50000  xxxx(此大小填入文件系统的实际大小,tftp下载完成后,会给出其大小)(需要0x300000 因为擦除了这么大,所以烧写这么大

3是从内存0x30000000,再到flash0x50000

更新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盘中,然后烧写镜像:

usb的主和从,默认只支持主,不支持从,经过移植可以实现从

1. 插入U盘(经测试<=4GU盘可以正常识别,8G以上U盘暂时无法识别)

2. U-boot目录下敲入以下命令

#usb start

(只有fat格式的才能支持

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    (插多个u盘的时候可以查看)

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  (这里的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

阅读(1365) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~