RK3288 Bare-metal Experiment
目录
- 1 序言
- 2 裸机开发环境的搭建
- 3 X3288裸机实例
- 4 = X3288裸机实例2-蜂鸣器实验
- 4.1 原理图
- 4.2 实验现象
- 4.3 X3288裸机实例3-adc模数转换实验
- 4.4 X3288裸机实例4-analog-clock模拟时钟实验
- 4.5 X3288裸机实例5-backlight背光测试实验源码原理图
- 4.6 X3288裸机实例6-color颜色测试实验
- 4.7 X3288裸机实例7-irrmote红外遥控测试实验
- 4.8 X3288裸机实例8-lcdscreen液晶屏测试实验
- 4.9 X3288裸机实例9-morsecode摩斯电码测试实验
- 4.10 X3288裸机实例10-rc5t620电源管理芯片实验
- 4.11 X3288裸机实例11-reboot重启测试实验
- 4.12 X3288裸机实例12-rtc实时时钟实验
- 4.13 X3288裸机实例13-rtttl诺基亚铃声播放器实验
- 4.14 X3288裸机实例14-syr82x同步降压开关稳压器实验
- 4.15 X3288裸机实例15-taichi太极八卦图实验
- 4.16 X3288裸机实例16-touchscreen触摸实验
- 4.17 X3288裸机实例17-watchdog看门狗实验
序言
在早期的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,我们是通过软件实现的)。
X3288裸机实例
X3288裸机实例1-LED流水灯实验
X3288硬件不包含led,我们通过软件实现的。我们直接进去下一个实验。
原理图
源码
实验现象
黄色的灯不停的闪烁。按下reconver按钮,进入命令行模式,可以查看一下设备的打印信息等等。
= X3288裸机实例2-蜂鸣器实验
原理图

上述电路通过一个NPN的三级管控制蜂鸣器的停止与蜂鸣。
GPIO状态 |
蜂鸣器状态 |
GPIO7_A3_D = 0 |
停止 |
GPIO7_A3_D = 1 |
蜂鸣 |
- 源码
这里的三个文件,其中buzzer.c的框架,我们的开发板上面使用的是buzzer-gpio.c驱动,没有使用buzzer-pwm.c驱动。
下面来给大家讲解这个驱动。注意这次3288开发板提供的裸机实验代码量巨大,接近20个实验的代码结构都是一致的,所以我们只讲解一个驱动的源代码,带领大家怎么分析,里面具体算法怎么实现的等等内容我们不会做详细的探讨。由于代码量巨大,我们从大的结构先开始,第一条线:start.S ->main.c 这一个流程在上面已经给大家描述过了。
第二条线:这个是重点关于设备是如何创建的,也是裸机教程的重点,流程:
初始化全局变量,注册machine设备,注册各种核心组件,注册各种驱动,探测具体machine以便加载同名的json设备树,依据设备树,创建设备。
第三条线:就是具体的调用过程。
这里需要重点说明的是:第一种:驱动在arch/arm32/mach-x3288/driver里面存在,第二种:在driver里面存在,其中第二里面的驱动是3288特有的驱动,也就是只支持3288这一个芯片的驱动,而第二种里面的驱动是一些共用的驱动,不仅支持3288,也支持比如4418,6818等。而在本教程中裸机使用所用到的驱动在x3288.json中来看选择的是哪一个。
比如我们要看蜂鸣器用的是哪一个驱动,首先看
http://x.9tripod.com/wiki/zh/index.php/File:Beep-soure1.png
看到这么目录下有3个文件,到底用的是哪一个呢?打开x3288.json,用搜索功能搜buzzer,
如图
可以看到使用的是buzzer-gpio.c这个驱动,记住@后面是地址,现在不用去管他。打开buzzer-gpio.c文件,看到.name = buzzer_gpio就知道的确是调用的这个驱动。
可以明显看出驱动的名字就是这个
因此全部的设备数都是由x3288.json来控制的。注意x3288.json中前814行都是关于时钟的设备数,后面是关于各个驱动的设备数。
实验现象
将TF卡插到x3288开发板的SD卡槽,上电开机,可以听到每隔约500ms,蜂鸣器会鸣叫一次。
X3288裸机实例3-adc模数转换实验
原理图

默认开发板上存在reset,recover,power键,在每一个实验中,起的作用不同,读者自己尝试下应该就明白了。一般作用分别为重启,切换到命令行模式,电源键等,个别会又不同。
源码
由x3288.json来判断知道这个是adc驱动的目录,从这里可以很清晰的看到adc是如何创建和调用的。
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,上电开机,可以看到显示屏有如下现象:
发现adc采样值和电压一直在变化。
X3288裸机实例4-analog-clock模拟时钟实验
原理图
略
源码
时钟驱动十分复杂,驱动涉及很多,这里不做详细描述,读者可以自行研究,遇到问题可以发到论坛。
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,上电开机:
现象:从12点开始,时钟的秒针开始转动。
X3288裸机实例5-backlight背光测试实验源码原理图
源码
原理图
实验现象
将TF卡插到x3288开发板的TF卡槽,上电开机,
红色条目上面的圆圈自动的左右滑动,可以看到屏幕亮度不断变化。
X3288裸机实例6-color颜色测试实验
源码路径:
略
实验现象
将TF卡插到x3288开发板的TF卡槽,上电开机:
红黄绿上面的圆圈在不断的跳动,同时右边的方形里面的颜色在不停的变换。
X3288裸机实例7-irrmote红外遥控测试实验
源码
原理图
实验现象
将TF卡插到x3288开发板的TF卡槽,上电开机
按任意按键,上面会出现不同的数字。
X3288裸机实例8-lcdscreen液晶屏测试实验
源码
略
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,
上电开机,显示屏会出现如下信息:
点击屏幕,颜色会不断的变化,从红、绿、蓝、红绿蓝、白、黑这样的顺序出现。
X3288裸机实例9-morsecode摩斯电码测试实验
源码
略
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,上电开机
点击开始测试,会出现蜂鸣声,有规律的响,这个就是在发送摩斯密码。
X3288裸机实例10-rc5t620电源管理芯片实验
源码
原理图
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,开机。
出现一系列的的参数比如:DC1:3.30000V 当初:2.00000V等。
X3288裸机实例11-reboot重启测试实验
源码
略
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,上电开机
点击重启,画面变暗,上半部分为黑色,,下半部分变为灰色。
X3288裸机实例12-rtc实时时钟实验
源码
略
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,上电开机
显示的时间或许会和下图的时间不一样,但是可以看到时间以秒为单位在不断变化。
X3288裸机实例13-rtttl诺基亚铃声播放器实验
源码
略
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,上电开机
接喇叭请注意看下图:
接上喇叭后,点击开始测试,会有音乐自动开始播放。
X3288裸机实例14-syr82x同步降压开关稳压器实验
源码
略
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,上电开机
会出现如下的图片,显示了2个参数。
http://x.9tripod.com/wiki/zh/index.php/File:Syr82x-test.png
X3288裸机实例15-taichi太极八卦图实验
源码
略
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,开机。
看到太极八卦图在不同的旋转。
X3288裸机实例16-touchscreen触摸实验
源码
略
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,上电开机
看到色白色的画面,直接在上面画线,可以测试触摸屏。
X3288裸机实例17-watchdog看门狗实验
源码
略
实验现象
将TF卡插到x3288开发板的右侧TF卡槽,上电开机
首先会响一声,上面的时间会由10s开始倒数,等变成0秒就开始重启,点击喂狗可以刷新时间为10秒。