1.裸机开发环境的体验(Redhat 6.4 + vbox)
一、裸机开发的一般流程
注意:这是假定你已经搭建好了裸机开发环境
我们裸机的一般开发流程:图1-1:
图1-1 裸机开发流程
由于在这篇文章里是体验裸机程序,所以我们跳过了1、2步骤。直接从第三步开始:
二、交叉工具链的安装:
在这里,我们编写的程序是要在开发板运行的,不是在pc机,所以pc机的gcc等编译器不再适用了,我们必须按照交叉工具链。由于我们的程序是要在ARM架构运行的。所以安装的工具链是arm-linux-*的工具链。
我们的工具链包放在/home/ARM-tools里的:arm-linux-gcc-4.3.2.tgz。如图1-2:
图1-2
接下来是解压,就是安装,我们把它解压到/usr/local目录下:使用的命令是:
tar -zxvf arm-linux-gcc-4.3.2.tgz -C /
该命令的意思是将该工具包解压到根目录。由于它加压开的文件夹是/usr/local/arm/4.3.2…所以我们解压后会在/usr/local/下看见有新的文件夹arm:如图1-3:
解压命令:
回车:
图1-3 安装工具包
我们从上面的回显看到安装的目录确实是/usr/local/arm。
安装好了之后,我们会在/usr/local/arm目录下看到4.3.2的工具链文件夹,这就是我们交叉编译的工具集。里面有很多arm-linux-开头的编译器,包括arm-linux-gcc,arm-linux-g++。这两个就是交叉编译C和C++的工具。如图1-4:
图1-4交叉工具链
三、交叉工具链的配置:
上面我们只是将交叉工具链解压安装而已,我们现在还不能用这些交叉工具链,因为我们还没有配置环境。如果我们现在在命令行执行:arm-linux-gcc会报错:图1-5:
图1-5
接下来配置这些工具链,使我们能够在命令行使用他们。配置的文件是在/etc/profile.打开该文件,添加工具链的路径即可:
export PATH=$PATH:/usr/local/arm/4.3.2/bin/
然后保存,使能我们刚配置的环境:source /etc/profile
这样我们就配置好交叉工具链。如下图1-6:
图1-6使能交叉工具链环境
测试一下环境:安装成功,图1-7:
图1-7
四、裸机体验:
接下来就是我们用编写好的裸机程序来测试一下我们的交叉工具链。
这里我们提供了一个点亮led的汇编文件程序:图1-8:
图1-8
在这里我们的源程序就两个,一个是led.lds链接脚本文件,一个汇编文件led.S。
编译汇编文件,产生二进制.o文件,图1-9:
图1-9 编译
链接文件,产生.elf文件,图1-10:
图1-10 链接文件
但是此时产生的文件是elf格式的,不是可执行的二进制文件。我们需要将elf文件转为可以在开发板执行的.bin文件。图1-11:
图1-11 生成bin可执行文件
上面我们终于把一个文件编程了可执行文件即是.bin文件。但是步骤有点繁琐,当我们一个文件需要修改的时候,又得重新编译一次。所以,我们不得不编写我们的Makefile文件。
由于我们现在只是体验裸机程序烧写到开发板。所以会在后面讲解:
现在我们把上面生成的bin可执行文件裸机程序烧写到开发板,看效果:
注意我们烧写到开发板的NandFlash的。
烧写裸机程序:
1、首先是把我们的SD卡插入到SD卡读卡器,并且插入电脑的usb口。图2-1:
图2-1 SD卡
2.打开我的电脑,右键SD卡盘符,选择格式化SD卡,点击开始,会有警告提示,选确定进行格式化SD卡。格式化完成会提示格式化完成,点确定即可。图2-2:
图2-2格式化SD卡
图2-2 格式化SD卡
3.格式化好了SD卡,就是烧写我们的SD卡引导程序。首先是打开烧写软件。我的是在F:\forfish资料\OK6410-A基础资料-256 (H)\Linux-3.0.1\Linux烧写工具目录下:图2-3:
图2-3
双击上面的SD_Writer.exe软件,会出现下图2-4.
图2-4
4.然后点击界面右上角的Scan键,会自动检测到我们的SD卡,SD Volume会显示你SD卡的盘符。Board Model是6410(我的是6410)。SD Type选Auto默认即可。OS Type也是默认Linux||Android。然后点击左下角的Select Boot。会出现一个界面,找到SD卡烧写程序mmc_ram256.bin(我的是256的),点选择。最后点击Program进行烧写。烧写成功会出现It is OK!. 图2-5:
图2-5
这就显示我们烧写好了SD程序。
5.退出usb,拔出SD卡,插入到开发板的SD卡插槽。图2-6:
图2-6
6.在我们给开发板上电之前,我们需要去设置我们pc机的端口,我们这里使用的是串口软件SecureCRT.exe。打开该软件后,创建一个新的serial端口,参数如下,名字com1.图2-7.
点击新建,然后选择Serial.
端口选择COM1,波特率115200,数据位8位,奇偶校验None,停止位1.取消流控的选择。然后点下一步。
点确定即可。
这样我们就创建好了端口COM1:
如上,我们选择COM1,点连接,即可通过串口连接开发板:
图2-7端口
7.接下来就是设置开发板从SD卡启动。图2-8:
1---8好开关引脚:off-off-off-on-on-on-on-on:
图2-8
8.最后给开发板上电,串口显示:图2-9:
图2-9 串口显示信息
9.选择1 Format the nand flash。格式化Nand Flash图2-10:
然后选择y:
选择3 Burn image from USB.
选择1 Flash u-boot:
图2-10 烧写
10.接下来才是到了我们烧写我们前面生成的led.bin点亮led的程序。
首先是将usb从windows 7拉到虚拟机的Redhat 6.4.右击vbox右下角的usb,会看到图2-11:然后鼠标点击选择该usb,选择之后,再次看,会发现这个usb前面多了一个对勾。这样usb就从windows 7 被我拉到了Redhat 6.4.这样我们就可以进行led.bin的烧写了。
图2-11 usb连接
12.烧写程序之前,要先装usb烧写的驱动程序:dnw_usb.ko。安装命令:
Insmod dnw_usb.ko
安装截图2-12:
图2-12
如上我们就安装好了usb烧写驱动。接下来就是到了真正烧写led.bin程序了。
13.把生成的led.bin拷贝到dnw所在的目录,就是截图2-12的那个目录。然后执行:
./dnw led.bin 50008000
执行的结果如下图2-13:
拷贝:
执行:
图2-13 执行结果
串口的反馈信息图2-14:
图2-14 烧写
可以看到我们烧写了1032192bytes到了内存里。
14.查看是否烧写成功,就是程序有没在开发板顺利运行。我们设置开发板从Nand Flash启动,然后重启。
Nand Flash启动:1-8:off-off-off-on-on-off-off-on即可。然后按动重启键。如下图2-15:
图2-15 设置Nand Flash启动, 点亮led
我们来看一下程序:
我们看到我们在汇编里给第一个灯的值赋为0,因为0xe=0b1110,就是第一个灯亮。说明我们烧写成功。
呼呼,终于烧写完成,呼呼……………………..