本文均属自己阅读源码的点滴总结,转账请注明出处谢谢。
欢迎和大家交流。qq:1037701636 email:[email protected]
今天在处理一些android开发的问题时,找到了去年年初做的一个基于Beagleboard-xm的项目,有个文档当初整理的不错,这个分享给大家吧。
基于Linux的BeagleBoard-xm终端开发环境搭建
PC机Linux开发版本:ubuntu10.04及以上
PC主要需要安装以下软件:minicom和NFS
开发板型号:Beagleboard-xm Revc
CPU型号:DM3730
软件开发包版本:DVSDK4.0.1
Linux内核版本:2.6.32
交叉编译环境版本:arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2009q1-203) 4.3.3
(注:以下有关命令行的操作均在root用户下进行)
一:交叉编译工具安装
1.1 交叉编译工具安装包的下载:
arm-2009q1-203-arm-none-linux-gnueabi.bin:
https://www.ridgerun.com/developer/wiki/index.php/Code_Sourcery_ARM_toolchain_2009q1-203
1.2 安装包的安装
执行命令如下:
./arm-2009q1-203-arm-none-linux-gnueabi.bin
完成窗口化安装,这里指定的安装目录为/opt/CodeSourcery/Sourcery_G++_Lite/
1.3 设置交叉编译器的环境变量
执行如下命令:
vim/etc/profile
在文件尾部添加如下内容:
exportPATH=/opt/CodeSourcery/Sourcery_G++_Lite/bin:$PATH
在使用时执行source /etc/profile时该环境变量全局生效。
二.DVSDK4.0.1软件开发包获取与安装
2.1 DVSDK4.0.1安装包下载网址:
http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/DVSDK_4_00/4_01_00_09/
2.2 DVSDK4.0.1的安装:
依次执行如下命令:
chmod 777dvsdk_dm3730-evm_4_01_00_09_setuplinux
./dvsdk_dm3730-evm_4_01_00_09_setuplinux
完成窗口化安装过程中需要指定之前安装的编译器目录,本文目录如下:
/opt/CodeSourcery/Sourcery_G++_Lite/bin。
三.DVSDK4.0.1 打补丁操作
我们知道DVSDK4.0.1是TI专门用于AM/DM37xxEVM等评估板而设计的,如果要将这个DVSDK用到我们的BeagleBoard-xm板上,主要需要打补丁的内容就是xload,uboot和linux kernel。
3.1补丁文件的下载
参考如下wiki:http://processors.wiki.ti.com/index.php/DVSDK_4.x_FAQ#How_to_build_and_install_DVSDK_4.01_on_BeagleBoard-xM
可以下载到适用于DVSDK4.0.1的补丁脚本setup-dvsdk-4-01-beaglexm-110126.sh,补丁脚本主要完成以下内容:
a.通过git下载xload,uboot和linux kernel源码;
b.对xload,uboot和linux kernel的打补丁操作;
c. 对makefile做一定的修改;
d.对SD卡制作脚本mksdboot.sh进行一定的修改;
(详细内容见附件)。
当然从这里可以我们可以下载到打完补丁的源码:
http://sourceforge.net/projects/dvsdkbbxm/files/DVSDK-4.01%20for%20BeagleBoard/DVSDK%20for%20BB%20xM-C/Source%20files/
四.DVSDK4.0.1 全编译和部分编译
4.1 DVSDK4.0.1的全编译
执行如下命令:
make clean
make all
以上命令会完成dvsdk内部所有内容的编译,包括xload,uboot,linux kernel以及用于Davinci架构的核心驱动:cmem.ko,dsplink.ko,sdma.ko等,当然还包括其他的组件。
4.2 DVSDK4.0.1的部分编译
这里的部分编译指的是如果只想编译修改过的内核,只需要执行如下命令就行:
make linux_clean
make linux
其余模块单独编译也类似。
五. 文件系统SD卡启动和NFS启动
Beagleboard-xm板支持内核从SD卡启动,但是文件系统也可以配置为NFS文件系统启动。
5.1 制作SD卡文件系统启动
DVSDK 自带的脚本可以设置SD卡启动,制作SD卡(最好是4G),需要如下步骤来完成:
a: 插入sd卡,执行fdisk -l命令查看SD卡的磁盘号,如/dev/sdd
b: 进入DVSDK所在目录,执行命令 ./bin/mksdboot.sh --device /dev/sdd --sdk `pwd`
c:选择显示设备LCD还是 DVI,最终完成SD卡的文件系统启动,需要一段时间。
5.2 制作SD卡从NFS启动
第一步:配置内核启动NFS文件系统,需要在本地建立一个文件系统,文件系统以DVSDK自带的dvsdk-dm37x-evm-rootfs.tar.gz(在DVSDK安装目录的filesystem目录中)为核心,这里执行如下命令完成文件系统的解压:
tar xzvf dvsdk-dm37x-evm-rootfs.tar.gz -C/home/BeagleBoard/rootfs
再在DVSDK安装目录下执行make intall
完成DVSDK所有模块的文件安装,安装目录在由Rules.make(这个文件很重要,指定了DVSDK中各个组件所在的目录,方便Makefile的编译)的EXEC_DIR变量来指定。
注:后者的操作很有必要,因为这里会将最新编译出来的驱动模块cmem.ko,dsplink.ko,sdma.ko等对解压出来的文件系统进行覆盖,如果不这样会造成驱动在启动加载时不能和内核相匹配而出现错误。
第二步:修改 mksdboot.sh的内容,其实修改的最终结果是替换bootargs参数的内容,这里配置成文件系统通过NFS来完成挂载:
直接从启动文件的参数代码如下:
setenv bootargs 'console=ttyS2,115200n8root=/dev/mmcblk0p2 rw ip=off mem=55M@0x80000000 mpurate=1000 omap_vout.vid1_static_vrfb_alloc=yomapfb.vram=0:8M mem=384M@0x88000000 omapfb.mode=lcd omapdss.def_disp=lcdrootwait vram=8M'
这里我提供的修改代码如下:
setenv bootargs 'console=ttyS2,115200n8 rwmem=55M@0x80000000 mpurate=1000 mem=384M@0x88000000omap_vout.vid1_static_vrfb_alloc=y omapfb.vram=0:8M omapfb.mode=lcd
omapdss.def_disp=lcd rootwait root=/dev/nfsnfsroot=192.168.1.55:/home/BeagleBoard/rootfsip=192.168.1.56:192.168.1.55:192.168.1.255:255.255.255.0,off'
最终形成boot.scr,该文件的内容会被xload读取作为uboot的环境变量。
注意:以上的参数个别变量符号不能写错如vram,否则内核提取时会发生错误,导致系统不能正常启动
第三步:本地NFS配置
执行如下命令:
vim /etc/exports
写入文件系统所在目录到该文件中如:
/home/BeagleBoard/rootfs*(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
重启NFS服务,执行如下命令
exportfs -a
/etc/init.d/nfs-kernel-server restart
最后,进入DVSDK所在目录,执行命令 ./bin/mksdboot.sh --device /dev/sdd --sdk`pwd`完成SD卡制作。
六. 自己参考设计的脚本文件
通过这段时间的学习,尤其是在对DVSDK4.0.1和DVSDK4.0.3做实验对比时,对重复敲打的一些命令写成了脚本,用于方便整个软件开发环境的搭建。
1.setup_sd.sh脚本:主要用于配置SD启动文件系统是通过NFS还是SD卡直接启动。
2.setup_nfs.sh脚本:用于完成PC机上文件系统的制作,主要是融合了上面提到的一些命令。
NFS配置参数:
setenv bootargs 'console=ttyS2,115200n8 rw mem=55M@0x80000000 mpurate=1000 mem=384M@0x88000000 omap_vout.vid1_static_vrfb_alloc=y omapfb.vram=0:8M omapfb.mode=lcd omapdss.def_disp=lcd rootwait vram=8M root=/dev/nfs nfsroot=192.168.1.55:/home/BeagleBoard/rootfs ip=192.168.1.56:192.168.1.55:192.168.1.255:255.255.255.0,off rootdelay=3'