首页
论坛
官方网站
English
跳转至:
导航
,
搜索
查看“RK3288 Bare-metal Experiment”的源代码
←
RK3288 Bare-metal Experiment
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==序言== 在早期的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压缩) http://x.9tripod.com/wiki/zh/images/4/40/Eclipse-package.png 如果出现这样的报错,请忽略他,也可以全部选是,这个的原因是因为window下没有linux下面的软链接造成的,不影响软件的使用。 第三步:启动eclipse 在解压的安装目录下,有<nowiki>eclipse.ba</nowiki>t和<nowiki>eclipse.ex</nowiki>e两个文件,双击<nowiki>eclipse.ba</nowiki>t即可启动(记得每次重新打开的时候都是打开这个.bat文件)。由于使用eclipse需要一些环境变量的声明,我们专程做了个脚本<nowiki>eclipse.ba</nowiki>t,双击即可声明环境变量,同时启动eclipse。这样,就不用再去手动设置环境变量了。当然用户也可以手动设置好环境变量,然后通过双击<nowiki>eclipse.ex</nowiki>e来运行eclipse,这里就不赘述了。 启动后界面如下:第一次启动eclipse时,会提示我们选择工作空间路径 http://x.9tripod.com/wiki/zh/images/a/ac/Eclipse-first.png 这里我们直接选择源码包所在的目录为工作空间: http://x.9tripod.com/wiki/zh/images/2/2c/Eclipse-workspace.png 点击OK。进入下面这个界面就会发现全部工程已经导入 http://x.9tripod.com/wiki/zh/images/2/23/Eclipse-import.png 双击打开某个工程,比如adc。记住一定要双击之后才会出现后面的编译选项 http://x.9tripod.com/wiki/zh/images/6/67/Eclipse-adc.png 右键adc会弹出如下画面 http://x.9tripod.com/wiki/zh/images/f/f0/Eclipse-adc-right.png 点击Build Project ,就会看到如下界面。 http://x.9tripod.com/wiki/zh/images/1/12/Eclipse-adc-build.png 记住console 控制台上面 make all 表示编译开始。注意右下角的18%,可以在这么观察编译的进度。在window下编译会比较慢,请耐心等候。 编译过程中的某个界面: http://x.9tripod.com/wiki/zh/images/8/84/Eclipse-adc-build-on.png 编译完成后: http://x.9tripod.com/wiki/zh/images/c/c7/Eclipse-adc-build-finish.png 注意控制台的打印信息,同时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 完成上面的过程后,插入升级卡,重启开发板,应该就可以正常升级了。升级完成后的界面应该是: http://x.9tripod.com/wiki/zh/images/a/ab/Eclipse-led-interface.png 下面读者可以自己来编译源码,然后烧录了。 编译完成后,在工程目录下会生成output目录: http://x.9tripod.com/wiki/zh/images/7/7a/Output-directory.png 图中x-<nowiki>ledpak.bi</nowiki>n即是我们最终需要的映像文件。注意千万别使用x-<nowiki>led.bi</nowiki>n,该文件没有和second boot打包,不能直接使用。 这里带大家看下led.map文件: 推荐大家用notepad++打开这个文件。打开之后是这样 http://x.9tripod.com/wiki/zh/images/0/01/Led-map.png <nowiki>Led.ma</nowiki>p查看那个函数在哪里,这里说明了那些函数链接到了内存中。 .text 表示代码段 http://x.9tripod.com/wiki/zh/images/f/f9/Led-map-text.png .bss未初始化数据段 http://x.9tripod.com/wiki/zh/images/b/bd/Led-map-bss.png .data 已经初始化数据段 http://x.9tripod.com/wiki/zh/images/a/a9/Led-map-data.png .comment注释段 http://x.9tripod.com/wiki/zh/images/8/8f/Led-map-comment.png ===下载源码到SD卡=== 针对x3288开发板,裸机开发我们几乎都是将裸机程序直接烧写到TF卡运行。在WindowsXP或是WIN7下,可以使用我们自主编写的烧写工具x3288<nowiki>_Fusing_Tool.ex</nowiki>e烧写,该软件可无缝兼容x210、x4412开发板。 注意,下载到TF卡时,首先我们需要给TF卡分区。从光盘中找到<nowiki>PartitionManager.ex</nowiki>e工具并打开,界面如下: http://x.9tripod.com/wiki/zh/images/3/3f/Partitionmanager.png 上图中H盘即为我们插入的TF卡分区。我们需要使用这个工具给TF卡预留一些空间,用于存放bootloader或裸机程序。首先我们右键点击最下面图标的可移动磁盘(H:),点击删除分区,如下图: http://x.9tripod.com/wiki/zh/images/0/03/Partitionmanager1.png 软件会弹出确认界面: http://x.9tripod.com/wiki/zh/images/f/f8/Partitionmanager2.png 勾上下次不再询问,点击是,即删除了原来的分区。这时,TF卡就只剩一个分区了。再次右键点击该分区,点击创建分区: http://x.9tripod.com/wiki/zh/images/2/26/Partitionmanager3.png 在请指定分区前面的自由空间大小一栏中填入我们需要预留的空间,我们这里填100M,留给bootloader或裸机已经足够用了。在请为新分区选择文件系统中选择FAT32,点击是,然后再到主界面快捷菜单栏点击应用即可。成功分区后提示如下: http://x.9tripod.com/wiki/zh/images/5/56/Partitionmanager4.png 至此,分区成功。用户也可以在ubuntu下使用gparted工具分区。 双击x3288<nowiki>_Fusing_Tool.ex</nowiki>e,将不小于2GB的TF卡通过读卡器插到PC机(注意市面上很多山寨的读卡器,推荐大家用正品行货,如飚王的读卡器,使用山寨读卡器不保证能正常将映像烧写到TF卡),这时烧写软件会自动识别出TF卡,如下图: <center>http://x.9tripod.com/wiki/zh/images/f/f8/Fusing-tool.png</center> 点击Browse,找到我们刚生成的<nowiki>x3288-led.bi</nowiki>n文件,点击Add,映像会添加到下面的路径中,这样下次如果不更改路径,就不用再指定路径了。 <center>http://x.9tripod.com/wiki/zh/images/7/72/Fusing-tool1.png</center> 点击START,开始烧写。烧写完成后,会有如下提示: <center>http://x.9tripod.com/wiki/zh/images/9/9f/Fusing-tool2.png</center> 点击确定即可。 在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 实例如下: http://x.9tripod.com/wiki/zh/images/1/17/Cat-partitions.png 输入d,表示删除分区,输入w 表示保存已经修改的分区信息。至此,原/dev/sdb1 被删除。拨掉TF 卡,再插入PC 机上。 注意:必须拨掉后再插入,否则仍然会提示存在/dev/sdb1 节点,会造成出错。第三步:使用gparted 工具给TF 卡预留256M 空间,用于存放uboot 映像。使用如下命令打开TF 卡分区表: http://x.9tripod.com/wiki/zh/images/2/2d/Gparted.png 选择分区->新建,预留256M 空间给uboot,剩下的分区使用fat32 格式,如下图所示: http://x.9tripod.com/wiki/zh/images/5/54/Aparted1.png 点击添加,选择菜单中的应用全部操作,完成TF 卡的分区。 第四步:将TF 卡剩余的空间格式化为fat32 格式sudo <nowiki>mkfs.vf</nowiki>at /dev/sdb1 第五步:进入映像生成目录,即output目录,执行如下指令烧写uboot 到TF 卡: cd output sudo /home/lixu/eclipse/X3288-NO-OS/x-beep/tools/linux<nowiki>/s5p3288-sdmmc.sh</nowiki> /dev/sdb x-<nowiki>beeppak.bi</nowiki>n 注意这里是笔者的路径,你们的路径参照这个填写。 注意,这里/dev/sdb 为TF 卡的节点,该节点为linux 系统自动分配,也有可能为sdc,sde等,用户可查询节点名称后再执行上面的烧写脚步。 === 设置开发板启动顺序=== x3288开发板默认首先从EMMC通道启动,如果开发板已经烧写了映像,则必须破坏掉默认的EMMC启动,下面将会有具体的实现方法。 === 通过TF卡运行裸机程序=== 将烧有裸机程序的TF卡插到x3288开发板右侧的TF卡槽,给开发板上电,无需按任何按键,八盏LED灯已经在来回闪烁了(注意我们的3288硬件上面没有提供这样的led,我们是通过软件实现的)。 ==X3288裸机实例== === X3288裸机实例1-LED流水灯实验=== X3288硬件不包含led,我们通过软件实现的。我们直接进去下一个实验。 ==== 原理图==== ==== 源码==== ==== 实验现象==== 黄色的灯不停的闪烁。按下reconver按钮,进入命令行模式,可以查看一下设备的打印信息等等。 http://x.9tripod.com/wiki/zh/images/a/ab/Eclipse-led-interface.png === X3288裸机实例2-蜂鸣器实验== ==== 原理图==== <center>http://x.9tripod.com/wiki/zh/images/4/4e/Beep-schematic.png</center> 上述电路通过一个NPN的三级管控制蜂鸣器的停止与蜂鸣。 {| class="wikitable" |- | GPIO状态 | 蜂鸣器状态 |- | GPIO7_A3_D = 0 | 停止 |- | GPIO7_A3_D = 1 | 蜂鸣 |} ::# 源码 http://x.9tripod.com/wiki/zh/images/7/7c/Beep-soure.png 这里的三个文件,其中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等。而在本教程中裸机使用所用到的驱动在x<nowiki>3288.js</nowiki>on中来看选择的是哪一个。 比如我们要看蜂鸣器用的是哪一个驱动,首先看 http://x.9tripod.com/wiki/zh/index.php/File:Beep-soure1.png 看到这么目录下有3个文件,到底用的是哪一个呢?打开x<nowiki>3288.js</nowiki>on,用搜索功能搜buzzer, 如图 http://x.9tripod.com/wiki/zh/images/4/4f/Beep-soure2.png 可以看到使用的是buzzer-gpio.c这个驱动,记住@后面是地址,现在不用去管他。打开buzzer-gpio.c文件,看到.name = buzzer_gpio就知道的确是调用的这个驱动。 http://x.9tripod.com/wiki/zh/images/2/25/Beep-soure3.png 可以明显看出驱动的名字就是这个 http://x.9tripod.com/wiki/zh/images/0/09/Beep-soure4.png 因此全部的设备数都是由x<nowiki>3288.js</nowiki>on来控制的。注意x<nowiki>3288.js</nowiki>on中前814行都是关于时钟的设备数,后面是关于各个驱动的设备数。 ==== 实验现象==== 将TF卡插到x3288开发板的SD卡槽,上电开机,可以听到每隔约500ms,蜂鸣器会鸣叫一次。 === X3288裸机实例3-adc模数转换实验=== ==== 原理图==== <center>http://x.9tripod.com/wiki/zh/images/d/d5/Adc-schematic.png</center> 默认开发板上存在reset,recover,power键,在每一个实验中,起的作用不同,读者自己尝试下应该就明白了。一般作用分别为重启,切换到命令行模式,电源键等,个别会又不同。 ==== 源码==== http://x.9tripod.com/wiki/zh/images/1/19/Adc-source.png 由<nowiki>x3288.js</nowiki>on来判断知道这个是adc驱动的目录,从这里可以很清晰的看到adc是如何创建和调用的。 http://x.9tripod.com/wiki/zh/images/5/57/Adc-source1.png 实验现象 将TF卡插到x3288开发板的右侧TF卡槽,上电开机,可以看到显示屏有如下现象: 发现adc采样值和电压一直在变化。 http://x.9tripod.com/wiki/zh/images/4/48/Adc-test-new.png === X3288裸机实例4-analog-clock模拟时钟实验=== ==== 原理图==== 略 ==== 源码==== 时钟驱动十分复杂,驱动涉及很多,这里不做详细描述,读者可以自行研究,遇到问题可以发到论坛。 实验现象 将TF卡插到x3288开发板的右侧TF卡槽,上电开机: 现象:从12点开始,时钟的秒针开始转动。 http://x.9tripod.com/wiki/zh/images/e/e4/Analog-clock-test.png === X3288裸机实例5-backlight背光测试实验源码原理图=== ==== 源码==== ==== 原理图==== http://x.9tripod.com/wiki/zh/images/1/1e/Backlight-schematic.png ==== 实验现象==== 将TF卡插到x3288开发板的TF卡槽,上电开机, 红色条目上面的圆圈自动的左右滑动,可以看到屏幕亮度不断变化。 http://x.9tripod.com/wiki/zh/images/d/de/Backlight-test-new.png === X3288裸机实例6-color颜色测试实验=== 源码路径: 略 实验现象 将TF卡插到x3288开发板的TF卡槽,上电开机: 红黄绿上面的圆圈在不断的跳动,同时右边的方形里面的颜色在不停的变换。 http://x.9tripod.com/wiki/zh/images/4/44/Color-test-new.png === X3288裸机实例7-irrmote红外遥控测试实验=== ==== 源码==== ==== 原理图==== http://x.9tripod.com/wiki/zh/images/8/8e/Irrmote-schematic.png ==== 实验现象==== 将TF卡插到x3288开发板的TF卡槽,上电开机 按任意按键,上面会出现不同的数字。 http://x.9tripod.com/wiki/zh/images/4/4d/Irrmote-test.png === X3288裸机实例8-lcdscreen液晶屏测试实验=== ==== 源码==== 略 ==== 实验现象==== 将TF卡插到x3288开发板的右侧TF卡槽, 上电开机,显示屏会出现如下信息: 点击屏幕,颜色会不断的变化,从红、绿、蓝、红绿蓝、白、黑这样的顺序出现。 http://x.9tripod.com/wiki/zh/images/0/07/Lcdscreen-test.png === X3288裸机实例9-morsecode摩斯电码测试实验=== ==== 源码==== 略 ==== 实验现象==== 将TF卡插到x3288开发板的右侧TF卡槽,上电开机 点击开始测试,会出现蜂鸣声,有规律的响,这个就是在发送摩斯密码。 http://x.9tripod.com/wiki/zh/images/2/2d/Morsecode-test.png === X3288裸机实例10-rc5t620电源管理芯片实验=== ==== 源码==== ==== 原理图==== http://x.9tripod.com/wiki/zh/images/a/a8/Rc5t620-schematic.png http://x.9tripod.com/wiki/zh/images/7/7a/Rc5t620-schematic2.png ==== 实验现象==== 将TF卡插到x3288开发板的右侧TF卡槽,开机。 出现一系列的的参数比如:DC1:3.30000V 当初:2.00000V等。 http://x.9tripod.com/wiki/zh/images/c/cf/Rc5t620-test.png === X3288裸机实例11-reboot重启测试实验=== ==== 源码==== 略 ==== 实验现象==== 将TF卡插到x3288开发板的右侧TF卡槽,上电开机 点击重启,画面变暗,上半部分为黑色,,下半部分变为灰色。 http://x.9tripod.com/wiki/zh/images/c/c6/Reboot-test.png === X3288裸机实例12-rtc实时时钟实验=== ==== 源码==== 略 ==== 实验现象==== 将TF卡插到x3288开发板的右侧TF卡槽,上电开机 显示的时间或许会和下图的时间不一样,但是可以看到时间以秒为单位在不断变化。 http://x.9tripod.com/wiki/zh/images/9/94/Rtc-test.png === X3288裸机实例13-rtttl诺基亚铃声播放器实验=== ==== 源码==== 略 ==== 实验现象==== 将TF卡插到x3288开发板的右侧TF卡槽,上电开机 接喇叭请注意看下图: http://x.9tripod.com/wiki/zh/images/7/70/Pickup-horn.png 接上喇叭后,点击开始测试,会有音乐自动开始播放。 http://x.9tripod.com/wiki/zh/images/4/40/Rtttl-test.png === 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卡槽,开机。 看到太极八卦图在不同的旋转。 http://x.9tripod.com/wiki/zh/images/5/55/Taichi-test.png === X3288裸机实例16-touchscreen触摸实验=== ==== 源码==== 略 ==== 实验现象==== 将TF卡插到x3288开发板的右侧TF卡槽,上电开机 看到色白色的画面,直接在上面画线,可以测试触摸屏。 http://x.9tripod.com/wiki/zh/images/a/aa/Touchscreen-test-new.png === X3288裸机实例17-watchdog看门狗实验=== ==== 源码==== 略 ==== 实验现象==== 将TF卡插到x3288开发板的右侧TF卡槽,上电开机 首先会响一声,上面的时间会由10s开始倒数,等变成0秒就开始重启,点击喂狗可以刷新时间为10秒。 http://x.9tripod.com/wiki/zh/images/3/36/Watchdog-test-new.png
返回至
RK3288 Bare-metal Experiment
。