跳到主要内容

裸机开发

本页把裸机教程整理成开发入口页:保留环境、烧写、TF 卡启动和实验清单,不搬运版权、技术支持、目录和其他产品介绍。

序言​

在早期的x210,x4412,x4418,x6818开发平台上,我们陆续推出了近30个丰富有趣的裸机实例,包括各种多媒体动画,趣味游戏等,深受广大嵌入式爱好者喜爱。在x3288开发平台上,应用户所托,我们在全新的四核平台上,攻克各种难关,继续推出近20个裸机实例,供大家研究学习。很多厂商推出的裸机程序过于简单,在x3288平台上,我们由简到烦,从简单的点灯,到点亮LCD,在LCD上绘图,绘动画等,复杂的程序多达几十万行,有兴趣的读者可以仔细琢磨里面的机理,势必对嵌入式的理解,对嵌入式兴趣的培养,以及对编程水平的提高,都有很大的作用,也期望我们推出的裸机开发实验,真正能对您有所帮助。

声明:本文档全部内容为九鼎创展(深圳市九鼎创展科技有限公司)原创作品,非经九鼎创展同意(书面形式),任何单位及个人不得擅自摘录本手册部分或全部,违者我们将追究其法律责任。

开发流程​

裸机开发环境的搭建​

开发裸机有很多种方法,之前在S3C2410,S3C2440平台上,比较常用的是ADS1.2或是MDK。但是这些工具主要针对ARM9平台,对于后续的cortex-A8,cortex-A9平台,他们是心有余而力不足。在linux下开发,需要安装linux操作系统,需要熟悉makefile,交叉编译工具链等。正因为如此,我们自主搭建了强大的eclipse开发平台,制作了两套eclipse开发环境,同时支持linux64位, windows64位操作系统。有了这二套eclipse开发环境,无论您使用ubuntu64位,或是win7,window10等等,都可以开发裸机。同时,烧写程序也不再局限于linux系统,无论您使用何种操作系统,都能方便的将映像文件写到SD卡。下面就开始我们裸机开发的神奇之旅吧!

安装eclipse​

第一步:确认自己的PC机开发环境。主板逻辑教程tools中有如下两个eclipse包:

eclipse-mars-for-arm-windows-x86_64.7z

eclipse-mars-for-arm-gtk-linux-x86_64.7z

从命名方式,我们能够很清楚的差别,我们需要的开发包。这些包全部是绿色软件,无需安装,解压即可。(建议大家使用linux做开发,这个软件包已经做过一些路径和脚本的配置。)由于笔者采用win10 64位操作系统,因此选用第一个包,读者根据自己的PC机环境选择对应安装包,后续不再重复说明。

第二步:解压eclipse安装包。(解压中可能会报错,推荐使用7zip或者360压缩)

如果出现这样的报错,请忽略他,也可以全部选是,这个的原因是因为window下没有linux下面的软链接造成的,不影响软件的使用。

第三步:启动eclipse

在解压的安装目录下,有eclipse.bat和eclipse.exe两个文件,双击eclipse.bat即可启动(记得每次重新打开的时候都是打开这个.bat文件)。由于使用eclipse需要一些环境变量的声明,我们专程做了个脚本eclipse.bat,双击即可声明环境变量,同时启动eclipse。这样,就不用再去手动设置环境变量了。当然用户也可以手动设置好环境变量,然后通过双击eclipse.exe来运行eclipse,这里就不赘述了。

启动后界面如下:第一次启动eclipse时,会提示我们选择工作空间路径

这里我们直接选择源码包所在的目录为工作空间:

点击OK。进入下面这个界面就会发现全部工程已经导入

双击打开某个工程,比如adc。记住一定要双击之后才会出现后面的编译选项

右键adc会弹出如下画面

点击Build Project ,就会看到如下界面。

记住console 控制台上面 make all 表示编译开始。注意右下角的18%,可以在这么观察编译的进度。在window下编译会比较慢,请耐心等候。

编译过程中的某个界面:

编译完成后:

注意控制台的打印信息,同时adc文件夹下多出来一个output目录。这样编译工作就完成了。

烧写镜像:​

接下来就开始来烧写镜像了。建议大家先使用我们九鼎提供的镜像看看实验效果后,再自己烧录镜像。

注意:我们提供的主板一般都已经烧进去了程序,而3288默认会从emmc优先启动,所以你插上刚刚制作好的tf卡会出现没有反应的现象。这时:必须先破坏mmc的启动才行。

破环的命令行是:

正常开机后,进入串命令行模式下:

第一步切换到root

su

第二步命令:下面这个为1条命令。

busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 count=8192 seek=1 conv=sync

完成上面的过程后,插入升级卡,重启主板,应该就可以正常升级了。升级完成后的界面应该是:

下面读者可以自己来编译源码,然后烧录了。

编译完成后,在工程目录下会生成output目录:

图中x-ledpak.bin即是我们最终需要的映像文件。注意千万别使用x-led.bin,该文件没有和second boot打包,不能直接使用。

这里带大家看下led.map文件:

推荐大家用notepad++打开这个文件。打开之后是这样

Led.map查看那个函数在哪里,这里说明了那些函数链接到了内存中。

.text 表示代码段

.bss未初始化数据段

.data 已经初始化数据段

.comment注释段

下载源码到SD卡​

针对x3288主板,裸机开发我们几乎都是将裸机程序直接烧写到TF卡运行。在WindowsXP或是WIN7下,可以使用我们自主编写的烧写工具x3288_Fusing_Tool.exe烧写,该软件可无缝兼容x210、x4412主板。

注意,下载到TF卡时,首先我们需要给TF卡分区。从光盘中找到PartitionManager.exe工具并打开,界面如下:

上图中H盘即为我们插入的TF卡分区。我们需要使用这个工具给TF卡预留一些空间,用于存放bootloader或裸机程序。首先我们右键点击最下面图标的可移动磁盘(H:),点击删除分区,如下图:

软件会弹出确认界面:

勾上下次不再询问,点击是,即删除了原来的分区。这时,TF卡就只剩一个分区了。再次右键点击该分区,点击创建分区:

在请指定分区前面的自由空间大小一栏中填入我们需要预留的空间,我们这里填100M,留给bootloader或裸机已经足够用了。在请为新分区选择文件系统中选择FAT32,点击是,然后再到主界面快捷菜单栏点击应用即可。成功分区后提示如下:

至此,分区成功。用户也可以在ubuntu下使用gparted工具分区。

双击x3288_Fusing_Tool.exe,将不小于2GB的TF卡通过读卡器插到PC机(注意市面上很多山寨的读卡器,推荐大家用正品行货,如飚王的读卡器,使用山寨读卡器不保证能正常将映像烧写到TF卡),这时烧写软件会自动识别出TF卡,如下图:

点击Browse,找到我们刚生成的x3288-led.bin文件,点击Add,映像会添加到下面的路径中,这样下次如果不更改路径,就不用再指定路径了。

点击START,开始烧写。烧写完成后,会有如下提示:

点击确定即可。

在linux下,方法类似。笔者使用的是ubuntu64位14.04系统,安装好对应版本的eclipse后,导入源代码,在linux平台下编译,不需要修改tools中的文件,编译好之后会产生4个文件。

Ubuntu下制作启动卡:

第一步:准备一张不小于2GB的TF卡,并插入装有ubuntu操作系统的PC机上;

第二步:删除TF卡的所有分区;在linux的终端窗口,使用fdisk/dev/sdb命令删除原来所有分区,sdb为系统为TF卡分配的设备节点。注意,具体由节点名称而定,有可能是sdc,sde等。使用如下指定查询设备节点:

cat/proc/partitions

实例如下:

输入d,表示删除分区,输入w 表示保存已经修改的分区信息。至此,原/dev/sdb1

被删除。拨掉TF 卡,再插入PC 机上。

注意:必须拨掉后再插入,否则仍然会提示存在/dev/sdb1 节点,会造成出错。第三步:使用gparted 工具给TF 卡预留256M 空间,用于存放uboot 映像。使用如下命令打开TF 卡分区表:

选择分区->新建,预留256M 空间给uboot,剩下的分区使用fat32 格式,如下图所示:

点击添加,选择菜单中的应用全部操作,完成TF 卡的分区。

第四步:将TF 卡剩余的空间格式化为fat32 格式sudo mkfs.vfat /dev/sdb1

第五步:进入映像生成目录,即output目录,执行如下指令烧写uboot 到TF 卡:

cd output
sudo /home/lixu/eclipse/X3288-NO-OS/x-beep/tools/linux/s5p3288-sdmmc.sh /dev/sdb x-beeppak.bin

注意这里是笔者的路径,你们的路径参照这个填写。

注意,这里/dev/sdb 为TF 卡的节点,该节点为linux 系统自动分配,也有可能为sdc,sde等,用户可查询节点名称后再执行上面的烧写脚步。

设置主板启动顺序​

x3288主板默认首先从EMMC通道启动,如果主板已经烧写了映像,则必须破坏掉默认的EMMC启动,下面将会有具体的实现方法。

通过TF卡运行裸机程序​

将烧有裸机程序的TF卡插到x3288主板右侧的TF卡槽,给主板上电,无需按任何按键,八盏LED灯已经在来回闪烁了(注意我们的3288硬件上面没有提供这样的led,我们是通过软件实现的)。

裸机实验清单​

实验说明
LED 流水灯GPIO 输出,验证 LED 控制。
蜂鸣器通过 NPN 三极管控制有源蜂鸣器,GPIO7_A3_D=1 蜂鸣,GPIO7_A3_D=0 停止。
ADC 模数转换读取 ADC 电压值。
analog-clock 模拟时钟在 LCD 上绘制并运行模拟时钟。
backlight 背光测试验证 LCD 背光控制。
color 颜色测试验证 LCD 颜色显示。
irremote 红外遥控验证红外接收。
lcdscreen 液晶屏测试验证 LCD 显示。
morsecode 摩斯电码按键/蜂鸣器组合测试。
rc5t620 电源管理芯片验证 PMU 相关功能。
reboot 重启测试测试软件重启。
rtc 实时时钟验证 RTC 时间保存。
rtttl 铃声播放器播放 RTTTL 铃声。
syr82x 同步降压开关稳压器显示电源参数。
taichi 太极八卦图LCD 图形绘制示例。
touchscreen 触摸触摸屏画线测试。
watchdog 看门狗倒计时喂狗与超时重启测试。

示例:蜂鸣器控制逻辑​

GPIO 状态蜂鸣器状态
GPIO7_A3_D = 0停止
GPIO7_A3_D = 1蜂鸣

运行方式​

将 TF 卡插入 X3288 主板右侧 TF 卡槽,上电后即可进入对应裸机实验。不同实验的现象以教程描述为准,例如触摸实验可以在白色画面上直接画线,看门狗实验会倒计时并在超时后重启。