1.裸机开发环境的体验(Redhat 6.4 + vbox)

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文件。

由于我们现在只是体验裸机程序烧写到开发板。所以会在后面讲解:

  1. 交叉工具链的使用
  2. 链接器脚本的编写
  3. 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.1Linux烧写工具目录下:图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,就是第一个灯亮。说明我们烧写成功。

呼呼,终于烧写完成,呼呼……………………..

原文地址:https://www.cnblogs.com/FORFISH/p/5188678.html