嵌入式LINUX环境搭建(SEED_DEC138软件用户手册的大大补充啊!支持原创啊!!)

来源:互联网 发布:心动的感觉知乎 编辑:程序博客网 时间:2024/05/18 01:46
首先得吐槽一下SEED的软件用户手册,各种错误各种忽略让新手直接抓狂啊!

直接修改SEED-DEC138软件用户手册,完整的交叉开发环境搭建和内核编译下载过程介绍:
linux版本:ubuntu 10.04
开发板:SEED-DEC138
参考手册:SEED-DEC138软件用户手册;SEED-DEC138_FAQs20110520;

4.1 配置交叉编译器路径补充:
1.安装Sourcery G++ Lite 2009q1-203 for ARM GNU/Linux编译器(执行arm-2009q1-203-arm-none-linux-gnueabi.bin,安装在/opt/Tools/arm-2009q1目录下)
这一步bin文件的安装不是简单执行就可以了的!新手们!具体安装过程见SEED-DEC138_FAQs文档问题16:(1)先修改arm-2009q1-203-arm-none-linux-gnueabi.bin属性:chmod 777...(2)终端执行:./...bin然后出现图形化安装界面,与windows下安装软件一样,注意修改路径为/opt/Tools/arm-2009q1(这个路径的文件夹是自己新建的,新手,亲!)
2.修改root目录下/root/.bash_profile文件(或/root/.bashrc):这一步是为了更改交叉编译器的环境变量,在后面用此交叉编译器编译内核时如果有问题都强烈建议把这个文件再执行一次!以保证交叉编译器的环境变量没有问题!
PS:查阅参考资料知道.bash_profile是用户的脚本,在用户登录时生效,;.bashrc是用户脚本在./bash_profile中调用生效。所以建议安全起见,两个文件都在末尾添加如下吧:
CROSS_COMPILE=arm-none-linux-gnueabi-
PATH="/opt/Tools/arm-2009q1/bin:${PATH}"
PATH="/usr/bin:${PATH}"
export PATH CROSS_COMPILE

(/opt/Tools/arm-2009q1该路径是在第一步中交叉编译器的安装路径)
3.执行#source .bash_profile(#source .bashrc)使之生效

4.2配置NFS文件系统服务
这部分文档的说明最狗血了!简单的让我这类新手白痴遇到一系列吐血问题啊!!!!
“修改/etc/exports 文件”这个在你没有安装NFS的时候(ubuntu默认是不带NFS的)是没有这个文件的,虽然也可以新建,但感觉就是不一样有木有!
这一步必须安装Xinetd,tftp,然后是NFS,为了装好TFTP,我实在吃尽了苦头啊,最后找到一个百试不爽的版本,强烈推荐这两个网址
http://www.cnblogs.com/geneil/archive/2011/11/24/2261653.html
http://www.cnblogs.com/shenhaocn/archive/2011/03/13/1983042.html
前面一个看TFTP后面一个看NFS的配置。真的非常详尽!
NFS的配置只需要把后面一个网站中的路径改下,即/opt/workspace/SEED-DEC138/nfs
*(rw,sync,no_root_squash,no_all_squash,no_subtree_check)
这里也要强烈PS:nfs文件夹的路径也要极其注意啊!后面编译内核的时候,SEED-DEC138-NFS有一个压缩文件包一定也要解压到这个地方啊!了解下NFS的原理就知道了:这个是最后开发板和PC共享的一个nfs文件夹。

4.3烧写UBL和UBOOT。
PS1.其实有两种方法,一种是串口烧写,一种是通过集成IDE的烧写工具,因为我们的CPU是OMAPL138,所以IDE用的是TI的CCS。网上有方法,我没有采用前一种是因为又有好些参数要改的,不懂怕出问题,然后SEED还是给SEED-DEC138这块板子提供了一些工具和现成文件,所以建议还是用现成的文件和CCS烧写办法吧。
PS2.哦,这里给小白提醒一下,CCS是装在WINDOWS下的,所以这一步是在WINDOWS下操作的哦!(当然啦,我也查到有适用于LINUX系统的CCS软件安装包,但是我怕麻烦没有尝试)
*安装包是CCS3.3,但是必须要升级BIOS才可以连上OMAP,这时要参考SEED-DEC138硬件用户手册里”CCStudio v3.3 环境搭建流程“这一章。我第一遍没有装好,在师兄指导下才成功,其实建议大家细心些,什么版本号的仔细看下就OK了,搞这个的真的要非常细心,可以少走多少弯路了。
*安装并且升级成功后将开发板与PC用仿真器相连(强烈建议用XDS560,不要用510,事实证明仿真器太弱,烧写也不容易成功,各种问题,小白们真的经不起折腾啊!)然后按照SEED-DEC138软件用户手册的步骤进行吧!其中用到的两个待烧写文件nand-writer_ccs33.out和nand-writer_ccs33.out在光盘路径下:SEED-DEC138_2010-8-26/03.Flash Writer。

5.好了,开始编译内核吧(普及一下,不是咱们PC的linux系统内核,是开发板的嵌入式内核

5.1.1 SEED-DEC138 Linux 内核配置
*解压UBOOT,内核,文件系统文件注意下路径吧,cp命令和tar命令的用法了解下,这一步不会有问题。但是后面要用到这些路径,所以一定要注意自己的路径!
*内核配置:SEED把这个特别要注意的细节给放在了FAQ25(。。。),"请确认 OMAP-L138 芯片的型号",如果尾号是 138B,则需要修改内核文件,再进行下面的内核编译生成镜像过程,要不然等板子启动不了再回过头来看又得花一段不必要时间!!
*然后再配置编译内核吧,推荐步骤:
#cd /opt/workspace/SEED-DEC138/linux-2.6.32/
# make distclean
# make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- SEED_ DEC138_ defconfig
# make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-menuconfig
# make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
这中间也有很多可能的问题:
Q1:make distclean这条指令大胆用,不用怕,尤其是之前有过不成功的配置的话直接清除所有系统文件可以更好进行下面的编译。
Q2:提示arm-none-linux-gnueabi找不到:就是4.1安装交叉编译器的时候说过的吧,应该是交叉编译器的环境变量没有改过来的原因,就执行下/root/bash_profile文件让环境变量生效吧。
Q3:提示menuconfig命令不可用:按照错误提示安装一个什么包就解决了。(PS:menuconfig成功后就不用再make xconfig了,两条指令都是为了配置内核,不过方式不一样而已。)
Q4:执行生成uImage指令时提示mkimage找不到:解决:apt-get install uboot-mkimage

5.1.3后面几节是指make menuconfig后配置内核时可以配置的选项,其实不必要看,按默认的就可以。

6.内核下载
问题巨多啊..强烈建议这之前对bootloader要有所了解啊,其实这所有的过程之前都应该有个大概了解原理,要不然像我这样盲然上手后患无穷啊,推荐一本书吧:孙纪坤,张小全编著《嵌入式Linux系统开发技术详解——基于ARM》,交叉开发环境的搭建步骤介绍原理特别清楚,嵌入式linux相关的书籍真的太多了,你一定得结合你自己所在的阶段看书才能事半功倍,我就是开始没搞清楚自己的阶段所以走了些弯路,刚开始看到的书对交叉环境的配置都介绍的很简略,自己也没重视,所以后面问题频出其实主要就是不懂要这样做有什么原因。
好吧,至于内核镜像文件有串口下载,TFTP下载,NFS下载,启动方式有NAND FLASH启动,UART启动什么的就不一一介绍了。(这里再次吐槽下SEED-DEC138软件用户手册,尼玛明明是两种不同的启动方式,写的好像要顺序执行似的,纠结死人呀!)这里我们用手册中的TFTP下载镜像文件,NAND FLASH启动。

6.0 硬件准备:串口连接UART2(UART0是默认从UART0启动),J11,J12,J13跳线到RS232接口,SEED-DEC138板卡J20拨码设置为01(即NANDFLASH启动)。

6.1 TFTP下载镜像文件uImage
1.在4.2节配置NFS前安装并测试过TFTP就应该知道,应该把uImage文件放在/tftpboot目录下。
2.使用串口做控制台(不是传输信息,这里串口只是用来打印板卡上的输出信息,也可以用串口传输文件,这里不讨论)。串口在PC上的终端显示可以用LINUX上的MINICOM也可以是WINDOWS的超级终端,但是建议为熟悉LINUX系统,还是用minicom.配置串口结果:波特率 115200,数据位 8,奇偶校验无,停止
位 1,数据流控制无;(minicom的具体使用参见http://www.360doc.com/content/10/1126/17/474846_72659607.shtml)
可能问题:minicom不能打印串口信息,
解决:(1)如果是虚拟机的话你一定要注意了!要在虚拟机设置中手动添加进去串口硬件的啊!
(2)串口COM1对应ttyS0, COM2对应ttyS1,所以minicom配置中这一项一定要注意,而且不要拼错了,幸亏看到网上有人说自己把ttyS0中的S没有大写导致错误,我才检查发现我就没有写S。(串口没有打印信息,这个也卡了好久啊。。。)
3.网络连接。这一点巨关键啊!直接影响TFTP是否能成功下载文件成功。
TIP1:虚拟机的话一定要将网络连接设置成Bridge模式。(发现一直load:TTTT到找出是这个原因那真是一个漫长啊,后来我果断不用虚拟机,改装双系统!!!)
(1)硬件连接:网线直接把PC和开发板相连呗,或者有人是将两者都连在一个路由器上只要保证两者在一个网段就行。
(2)要保证网络连接成功,ubuntu右上角有网络连接图标的。断开启用保证两者确实连上,下一步再设置IP使两者在同一网络。
(3)串口线,网线连好,PC端打开minicom,配置好串口参数,开发板上电,minicom没有任何打印信息的话,再硬件reset板卡,之前如果烧写UBOOT,UBL成功并且minicom设置正确的话就应该进入UBOOT,显示bootloading信息,(强烈建议看下UBOOT是如何引导系统启动的原理),超级终端显示 Hit any key to stop autoboot:3 时按下回车键,中断系统,此时显示提示符 U-boot> ;下面配置 U-Boot 环境变量用于 TFTP 下载内核启动;
(4)配置启动参数,我这里侧重用TFTP下载文件,所以先重点讲网络连接的关键之IP参数设置吧。
a.配置 TFTP 服务器(即PC) IP 地址:setenv serverip 192.168.253.77
  ATTENTION:这里是采用的静态IP,记住,这里的配置都是在UBOOT下配置到开发板去的参数,对PC是没有影响的,所以在这之前你必须把PC的IP设置成你现在用的这个IP才能保证后面网络相通:
方法:打开ubuntu的网络连接设置,一块网卡的话应该就是eth0,修改其IP->应用;另外打开一个终端,ifconfig eth0=xxxxxxx(你要设置的IP);然后再ifconfig查看IP参数是否修改正确了。这里一定要保证一个连接:开发板与网卡的连接(网卡要确定是eth0,而不是其他);2个IP绑定:即eth0与起IP;开发板与其IP绑定,这个连接和绑定在脑子里清楚的话就一定能连接成功(我为此熬了多长时间啊。。。)
b.配置开发板IP:setenv ipaddr 192.168.253.123(注意要与PC的IP在一个网络)
c.这里我先不配启动参数,为了检查是否网络连接成功,先保存IP设置:uboot>saveenv
d.uboot下ping服务器:ping 192.168.253.77(服务器IP);若出现host is alive。则后面下载肯定没问题了,否则,检查网络吧!
e.pc是无法ping通开发板的,这个是正常的,SEED-DEC138FAQ27解释:因为 U-boot 没有整合完整的网络协议架构,所以只能做向外访问行为,无法回应外部向内访问。
f.理论上现在就可以用tftp下载文件了:tftp 0xc0700000 uImage
,然后正常是:
TFTP from server 192.168.253.77; our IP address is 192.168.253.123
Filename 'uImage'.
Load address: 0xc0700000
Loading: ##################
不正常就是TTTTTT。

6.2配置启动参数吧,准备启动啦!
》setenv serverip 192.168.253.77
》setenv ipaddr 192.168.253.123
》setenv bootargs mem=128M console=ttyS0,115200n8 root=/dev/nfs
nfsroot=192.168.253.77:/opt/workspace/SEED-DEC138/nfs rw
ip=192.168.253.123:192.168.253.1:255.255.255.0(注意!!这一行应该是连续的)
》setenv bootcmd 'tftp 0xc0700000 uImage; bootm'
》saveenv
原文档nfsroot后的IP是错误的,亲们,自己注意仔细检查哦。

PS:原文中6.2 SEED-DEC138 Linux JFFS2 文件系统启动是另外一种启动方式,这里我们就不尝试了。要用的话一个是注意把.jffs2文件复制到/tftpboot下;二个是环境变量设置中注意控制台是ttyS0(如果你也用的是串口1的话)

6.3 好啦,reset开发板,内核在板子上启动啦,可以下一步真正的开发啦!