Chinaunix首页 | 论坛 | 博客
  • 博客访问: 658414
  • 博文数量: 175
  • 博客积分: 2457
  • 博客等级: 大尉
  • 技术积分: 1488
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-13 20:31
文章分类

全部博文(175)

文章存档

2012年(22)

2011年(153)

分类: C/C++

2011-07-26 18:18:10

七、脱机运行
一般在进行程序调试时,我们采用NFS与tftp等网络通信方式共享Linux服务器中的资源,用于嵌入式Linux进行访问、改写。

在程序调试成功,并且版本稳定之后,我们需要嵌入式Linux脱离服务器的支持,单独运行起来。这时,需要有完整的Linux操作系统各部分,包括 BootLoader,内核,根文件系统这三部分。

Davinci板卡采用的BootLoader是uboot,内核提供了源文件,编译即可得到,根文件系统我们分别使用过ramdisk及yaffs2这两种方式。

Davinci板卡采用的存储介质是Flash,根据功能差异分为Nor Flash与Nand Flash两种。

脱机运行前需要将uboot、内核及根文件系统烧写到Flash中,然后在uboot中进行相应的配置。

 

Davinci的一般启动过程如下:

       Rbl->[ubl->] uboot->uImage->rootfs->用户程序

在Nor flash上的启动过程:

首先运行芯片中的Rbl,然后启动flash上的uboot,加载uImage,使用rootfs,运行用户可执行程序。

在Nand flash上的启动过程:

首先运行芯片中的Rbl,然后ubl,再启动uboot,加载uImage,使用rootfs,运行用户可执行程序。

 

下面以运行在Nor flash上的ramdisk文件系统为例说明。下面提到的Flash,如果没有指定为Nand Flash,则Flash就指的是Nor Flash。

 

1,烧写uboot
(1)编译uboot
目前我们使用uboot1.1.4 ,在Linux下,进入uboot1.1.4目录,

依次输入如下命令:

make clobber

make davinci_config

make ARCH=arm

就生成了可执行文件 u-boot.bin 。

(2)烧写uboot
将uboot烧写进Flash,有两种方法:一是使用JTAG头连接仿真器,使用仿真器烧写;二是使用串口进行烧写。

注意:

在连接仿真器及串口线,拨动S3开关,切换J4跳线时,必须要在断电情况下操作。

 

仿真器烧写:

将Davinci板卡断电,

将DM6446开发板上的S3开关拨到全部为ON,在J4跳线处选上Nor Flash,连接仿真器;

将Davinci板卡上电,

打开CCS(需要设置CCS为仿真模式),在菜单中选择 File-- Load Program ,找到Flash的烧写程序flashwrite.out ,然后运行,根据提示分别输入uboot文件名u-boot.bin,及偏移地址0,等烧写完毕即可;

将Davinci板卡断电,

将S3切换到Nor Flash启动,即拨为1011111111,运行串口控制软件Tera Term ,选择COM1口,设置波特率为115200;

将Davinci板卡上电,

在Tera Term窗口会有uboot的启动信息显示。

 

串口烧写:

       由于dvflasher运行需要 .net FrameWork 2.0,所以先安装这个程序。

将Davinci板卡断电,

将DM6446开发板上的S3开关拨到全部为ON,在J4跳线处选上Nor Flash,用串口线连接PC主机与Davinci板卡;

将Davinci板卡上电,

在主机上运行命令行,在命令行输入命令:dvflasher -r u-boot.bin,等烧写完毕;

将Davinci板卡断电,

将S3切换到Nor Flash启动,即拨为1011111111,运行串口控制软件Tera Term ,选择COM1口,设置波特率为115200;

将Davinci板卡上电,

在Tera Term窗口会有uboot的启动信息显示。

 

串口烧写nand flash:

将Davinci板卡断电,

将DM6446开发板上的S3开关拨到:1101111111,在J4跳线处选上Nand Flash CS2,用串口线连接PC主机与Davinci板卡;

将Davinci板卡上电,

在主机上运行命令行,在命令行输入命令:dvflasher -fnandbin u-boot_nand.bin,等烧写完毕;

将Davinci板卡断电,

将S3切换为Nand Flash启动,即拨为全部为OFF,运行串口控制软件Tera Term ,选择COM1口,设置波特率为115200;

将Davinci板卡上电,

在Tera Term窗口会有uboot的启动信息显示。

2,烧写Linux内核
内核指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统。

  在Linux 内核中,包括了:进程管理、定时器、中断管理、内存管理、模块管理、虚拟文件系统接口、文件系统管理、设备驱动程序、进程间通信、网络管理、系统启动等操作系统功能的实现。

(1)编译Linux内核
当板卡硬件有改动,或需要增加某些底层功能时,需要改动内核模块,可以使用如下命令来更改内核模块的配置:

make menuconfig

生成的配置文件保存在

mv_pro_4.0\montavista\pro\devkit\lsp\ti-davinci\arch\arm\defconfig

然后在:

mv_pro_4.0\montavista\pro\devkit\lsp\ti-davinci


目录下输入如下命令:

make ARCH=arm CROSS_COMPILE=arm_v5t_le- davinci_dm644x_defconfig

      make ARCH=arm CROSS_COMPILE=arm_v5t_le- checksetconfig

      make ARCH=arm CROSS_COMPILE=arm_v5t_le- uImage

      cp arch/arm/boot/uImage /tftpboot/uImage

chmod a+r /tftpboot/uImage


 


 

就可以编译出新的内核。

更多的细节请参考《Building a Small Embedded Linux Kernel Example  spraah2.pdf》。

(2)烧写Linux内核
从Linux服务器下载内核映象文件并烧写进Davinci板卡的Nor Flash中,我们使用板卡上的uboot,通过tftp协议,从Linux服务器上下载编译好的内核,过程如下:

a,将内核文件uImage复制到Linux服务器的 /tftpboot/ 目录下,

b,连接PC与Davinci板卡,需要连接串口线及网线,在连接串口线时需要将Davinci板卡断电。

c,启动运行串口控制软件Tera Term

d,将Davinci板卡上电,在Tera Term窗口中按下任意键,进入输入命令状态

e,依次输入如下命令:

             tftpboot 0x80080000 uImage                    //从tftp服务器拷贝至内存中

             erase 0x2100000 22fffff                            //擦除2M的空间

             cp.b 0x80080000 0x2100000 0x200000     //从内存拷贝至Flash中

              等待命令执行完毕,就成功烧写内核文件进Nor Flash中了。

最后,在正式启动板卡时要读取flash上的内核文件,还需要设置环境变量为从flash启动,使用如下命令设置即可:

setenv bootcmd ‘bootm 0x2100000’

3,烧写根文件系统
Linux引导启动时,默认使用的文件系统是根文件系统。其中一般都包括这样一些子目录:
etc, dev, usr, usr/bin, bin, var等。
etc目录主要含有一些系统配置文件;dev含有设备特殊文件,用于使用文件操作语句操作设备;usr存放库函数、手册和其它一些文件。bin存放执行程序;var用于存放系统运行时可变的数据或者是日志等信息。

根文件系统有多种格式,例如romfs、ramfs、jffs2、yaffs2等,我们以ramfs为例说明编译及烧写过程。

(1)制作ramdisk
在Linux服务器中制作ramdisk过程如下:

a,开辟一块硬盘空间,这里定为14M,名字为ramrootfs,并格式化为ext2文件系统:

 dd if=/dev/zero of=ramrootfs bs=1k count=14336

  mke2fs -F -m 0 -i 2000 ramrootfs

b,把虚拟盘挂载到目录ramfs:

  mount -o loop -t ext2 ramrootfs ramfs

c,复制所需根文件系统内容至ramfs中

d,使用nfs方式调试,确认文件系统可用。

e,跳到ramfs目录外,卸载ramfs,并压缩文件系统映象:

 umount ramfs

 cat ramrootfs | gzip -9 > ramdisk.gz

(2)烧写ramdisk
从Linux服务器下载ramdisk.gz文件并烧写进Davinci板卡的Nor Flash中,     我们使用板卡上的uboot,通过tftp协议,从Linux服务器上下载压缩好的ramdisk.gz,过程如下:

a,将ramdisk.gz复制到Linux服务器的 /tftpboot/ 目录下;

b,连接PC与Davinci板卡,需要连接串口线及网线,在连接串口线时需要将Davinci板卡断电;

c,启动运行串口控制软件Tera Term;

d,将Davinci板卡上电,在Tera Term窗口中按下任意键,进入输入命令状态;

e,依次输入如下命令:

             tftpboot 0x80080000 ramdisk.gz                 //从tftp服务器拷贝至内存中

             erase 0x2300000  0x28fffff                         //擦除6M的空间

             cp.b 0x80080000 0x2300000 0x600000       //从内存拷贝至Flash中

              等待命令执行完毕,就成功烧写ramdisk根文件系统进Nor Flash中了。

最后,在正式启动板卡时要读取flash上的根文件系统,还需要设置环境变量为从flash读取,使用如下两个命令设置即可:

setenv bootcmd 'cp.b 0x2300000 0x85000000 0x600000; bootm 0x2100000'

setenv bootargs console=ttyS0,57600n8 video=dm64xxfb:interface=composite:mode=pal ip=192.168.1.82::192.168.1.1 root=/dev/ram0 rw initrd=0x85000000,14M mem=112M

第一个命令中主要相关部分是cp.b 0x2300000 0x85000000 0x600000 ,作用是在Davinci板卡启动时拷贝根文件系统至内存中;

第一个命令中主要相关部分是root=/dev/ram0 rw initrd=0x85000000,14M ,作用是设置Davinci板卡启动时采用ramdisk根文件系统。

 

 

结束语:本文介绍了TI的Davinci开发平台调试环境的搭建,主要包括交叉编译工具链的安装,linux服务器环境的配置,CCS及仿真器的安装,程序编译运行流程,以及脱机运行。希望有兴趣的朋友多来交流,大家共同提高。

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