AM1808是TI(美国德州仪器)公司生产的基于达芬奇架构的一款arm926ej-s内核的芯片,AM1808处理器集成了357/450MHz的ARM9内核及128K-Byte的On-chip momery,并提供了丰富的外设接口。其包括网口、音频输入输出接口、USB OTG(480Mbps)、USB HOST(USB1.1)、SATA接口、SD/MMC接口、UART(0和1为三线TTL电平且可扩展,3为五线串口,RS232电平供调试用)、SPI、IIC、JTAG、CAMERA、TFT屏接口、触摸屏接口、键盘接口和总线接口等。外部存储器包括128M Nand flash和128M DDR。

ARM926EJ-S处理器支持ARM调试架构并提供一套完整的高性能子系统,包括:ARM926EJ-S整数核心,CP15系统控制协处理器,存储器管理单元(MMU),独立指令和数据高速缓存,写缓冲区,内部RAM,AHB总线接口等。

-----------------------------------------------------------

在使用这块板子的时候,先使用套件提供的资源搭建开发环境,装了Virtual Box虚拟机并在上面运行了ubuntu10.04系统,设置共享数据空间以利于windows和ubuntu数据的共享。

虚拟机的安装,大体的虚拟机有两种,一种是VMvareWorkstation

另一种是VirtualBox,两种虚拟机功能大同小异,用户可以根据自己的喜好选择,这里简单地介绍下VirtualBox的使用技巧。

VirtualBox软件可以从这个网站下载到:https://www.virtualbox.org/wiki/Downloads

然后安装,软件的安装纯粹傻瓜化,不做解释。

安装完后创建虚拟机。开始菜单启动,然后new -> next -> 给虚拟机命名,选择操作系统linux -> 给虚拟机分配ram,建议512M -> next -> 选择“creat new hard disk” -> next -> 建议选择Fixed-size storage -> next -> 选择硬盘大小(至少8G)-> finish -> 完成。

至此虚拟机创建完成,你又有一台电脑了。

安装ubuntu系统,安装虚拟机后就可以再在其上安装你需要的操作系统,什么redhat,ubuntu, win xp,win 7,Fedora随你喜欢,只要你的pc内存够大,同时运行多个系统不够卡的话。这里在VirtualBox中安装ubuntu10.04。Ubuntu系统镜像可以在这个网站下载到http://www.ubuntu.com/download/desktop,目前已经更新到12.04版本了。安装步骤:启动虚拟机 -> setting -> storage -> IDE 控制器 选择虚拟CD/DVD光盘文件 打开你下载好的ubuntu.iso镜像文件 -> 点击OK,进入ubuntu安装界面。然后按照相关提示和默认选项进行安装即可。

-----------------------------------------------------------

一套完整的嵌入式软件系统由三部分组成,即uboot,kernel和rootfs,SBC8018在出厂时就已经将他们烧写在了nandflash上的固定位置,下面就让我们看看具体是怎么做的。

安装交叉编译环境,将光盘自带的linux/tools/下的arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2压缩包拷贝到linux下解压,然后将解压目标的路径添加到环境变量中,命令如下

Export PATH=$HOME/tools/arm-2009q1/bin:$HOME/tools:$PATH

也可以直接修改主目录下的.bashrc文件,在其末尾添加export PATH=$PATH:/home/lg/tool/arm-2009q1/bin 即可在开机时自动添加该环境变量。

编译启动代码,生成映像文件u-boot,(注:启动代码是计算机不可或缺的部分,而不同的平台使用不同的启动代码,例如linux磁盘引导程序LILO,GNU的引导程序GRUB,DOS引导linux程序Loadin,还有通用的引导程序U-boot等)命令如下:

make distclean(清除编译的残余文件,功能类似于makefile中的make clean)

make da850evm_config(配置与开发板相关的文件)

Make(此处才是真正的编译uboot中的代码)

这时在该目录下会生成u-boot,拷贝到数据共享目录备用。

编译内核。先进入内核目录linux-03.20.00.14,然后执行类似命令:

make distclean

make da850——omapl138_defconfig

make uImage

执行完以上操作后,arch/arm/boot目录下会生成我们需要的uImage文件。

文件系统的制作。嵌入式的文件系统也有很多,例如:ext2,ext3,NFS,vfat,proc,jfs,minix,在这里,我们使用的是jffs2根文件系统,该系统曾是IBM的AIX使用的日志文件系统。进入tools目录,运行指令sudo mkfs.jffs2 -r rootfs -o jffs2.img

之后,就生成了jffs2.img文件,与上面的uImage一同拷到共享数据目录下备用。

在这里介绍一下在VirtualBox中设置共享数据的技巧。

一、安装增强功能包

首先在VirtualBox的菜单里选择“设备(device)”-> 安装增强功能包。

然后进入CD/DVD驱动器,也就是光驱,运行一个叫VBoxlinuxAdditions-x86.run的文件。具体在终端中输入cd /media/cdrom0 后继续输入sudo sh ./VBoxlinuxAdditions-x86.run

二、设置共享文件夹

重启系统完成后,点击设备 -> 分配数据空间 -> 添加一个windows下的共享文件夹share。

三、挂载共享文件夹

Ubuntu终端下输入

sudo mkdir /mnt/sharefile

sudo mount -t vboxsf share /mnt/sharefile

(将刚才的windows下的共享文件夹的内容挂载到根目录下的mnt/share下)这样你就可以共享这个文件夹的数据了,这个文件夹在windows和ubuntu都有读、写、删除权限。

另外,你如果嫌每次输入挂载命令麻烦,那么教你开机自动挂载的方法。

终端运行 sudo pico /etc/fstab

然后在这个文件中添加一句

Sharedfolder /mnt/sharefile vboxsf defaults 0 0

保存退出。重启系统时就会自动挂载了。

-----------------------------------------------------------

U-boot的烧写,linux系统移植

Uboot的生成,首先请先确保你安装了TI公司开发的配套软件AISgen_d800k006_Install_v1.7.exe,然后从开始菜单中启动AISgen for D800K006,file -> load configuration 打开光盘中tools目录下的AM1808-UART.cfg。

此文件旨在文件中添加配置AM1808启动相关的波特率,PLL锁相环,clock时钟,DDR存储和entrypoint入口地址等信息,具体内容可以打开此文件自行查看。

然后打开共享数据空间中的u-boot到软件中[ARM Application File:]位置。

最后指定文件输出路径在[AIS Output File:]位置。点击Generate AIS生成u-boot-uart-ais.bin。

Uboot的烧写,首先将板子的启动模式拨码开关调制串口启动模式(具体可查看硬件原理图),然后打开UART BOOT HOST软件,在AIS file位置添加刚才生成的u-boot-uart-ais.bin。插上U转串,在Serial Port选择相应COM口(查看我的电脑属性->设备管理器),点击start后快速打开板子的电源,会在此消息框中显示received BOOTME等信息,当出现Closing COMx时,说明下载完成。然后打开windows中的超级终端,就会开到“U-boot->”字符。

下面开始烧写,在超级终端依次输入

->nand erase

->tftp 0xc0700000 u-boot-nand-ais.bin;nand write.i 0xc0700000 0x20000 ${filesize}

->nandecc sw

-> tftp 0xc0700000 uImage;nand write.i 0xc0700000 0x200000 ${filesize}

-> tftp 0xc2000000 jffs2.img;nand write.i 0xc2000000 0x600000 ${filesize}

到这里就将整套的嵌入式linux系统移植到开发板上了,将拨码开关调制nand启动后重启,你就会在超级终端中看到你熟悉的linux的文件系统了。

-----------------------------------------------------------

好了,到这里让我们休息一下,回顾一下上面所述的内容,发现似乎没有什么有实质性技术含量的东西,但是这是每个做嵌入式开发工作的人所必须经历的过程,如果不追究细节,基于arm的应用开发就可以在基础上做了,但是我所要做的是做出基于arm平台的实际产品,单单在这块评估板上的学习远远不够,所以我打算从头再来,一步一个脚印的搞清楚AM1808是如何启动的。

-----------------------------------------------------------

AM1808的启动

基于arm926ejs内核的AM1808芯片支持多种启动方式,其BOOT模式主要有:NOR,NAND, MMC/SD0,I2C EEPROM, I2C SLAVE, SPI FLASH, SPI EEPROM, SPI SLAVE, UART等。

我们在这里选择通过uart2 启动,而先前讲到的就是通过软件配置利用uart 2 下载程序。那么AM1808是如何引导uboot启动的呢?他与我们所熟悉的s3c2440的启动有什么区别呢?

AM1808的NAND启动特性是不支持一次性全部启动,比如像s3c2440这种CPU,不管是从NOR启动还是NAND启动,都是一次性的,只需一级boot就可以引导LINUX/WINCE等,这就是一次性启动。
相反的TI的达芬奇架构的OMAPL系列以及引脚兼容的单核产品均不支持一次启动,而是三级启动,分为RBL(ROM bootloader),UBL(user bootloader),U-boot。
RBL是CPU内部ROM上固件程序,在出厂时就已经烧写进去了,这部分我们不用关心,只需知道,在复位时,CPU会采集BOOT[7:0]引脚状态,从而选择对应的启动方式。

而我们采用串口启动方式把启动代码通过串口下载到DDR里面,RAM再从DDR中的代码段的起始地址将启动代码加载到片上RAM运行,第三步才是运行U-boot的命令。

U-boot的代码是怎么实现的呢?它的作用是什么呢?无疑的我们将目光锁定到第二三级的boot。

所以下载U-boot的源码进行分析。U-Boot软件包下载网站:http://sourceforge.net/project/u-boot

首先介绍u-boot源代码的目录结构

-board 存放板子相关的目录文件(davinci/da8xxevm/da850evm.c)

-common 通用的多功能函数实现

-cpu 存放CPU相关的目录文件(arm925ejs/start.s)

-disk 硬盘接口驱动程序

-doc 开发使用文档

-drivers 通用驱动程序

-examples 例子程序

-include 头文件(configs/da850evm.h)

-lib_arm 存放对ARM体系结构通用的库文件,主要用于实现ARM平台通用的函数 (board.c)

-net 网络相关代码

大致了解了U-boot源码树的结构之后,我们来考虑他是怎么编译的。                   先看总目录下的Makefile,打开之后发现里面的内容和我们平时看见的makefile有很大的不同,而且竟然有三千多行,不必担心,我们化繁为简,想想makefile的作用是什么呢?不就是编译.c、.s等文件生成.o,然后链接.o生成可执行文件吗,我们看的时候也只挑自己看得懂的看,它里面的内容按顺序依次为:

A.指定了uboot的版本等相关信息。

B.定义主机操作系统类型

C.定义执行shell脚本的shell

D.设定编译输出目录

在这一步结束后会涉及到mkconfig脚本,顺便我们就把他的作用也说了,在它里面通过传入命令行参数确定了目标板型号,cpu型号等信息,检查了参数的合法性,创建到目标板相关的目录的链接,构建了include/config.mk文件,指定了开发板代码所在的目录,构建了include/config.h文件。

以上这些都是我们刚开始编译时make da850evm_config指令所做的事情,下面我们来看看make指令做了什么工作。

在makefile中自语句“all:”开始就是make的作用范围了,在这里生成的include/config.mk做了如下工作:

1.设置obj与src

2.设置编译选项

3.指定交叉编译工具

4.包含与开发板相关的配置文件

5.指定隐含的编译规则

此时LIBS变量指明了U-Boot需要的库文件,包括平台/开发板相关的目录、通用目录下相应的库,都通过相应的子目录编译得到的。

之后就是编译了,这里只是指定了编译时的各种依赖关系,最终生成u-boot,u-boot.bin等文件。其中有一个依赖是我们所要关心的,就是u-boot.lds,它的作用就是链接.o文件使代码重定向划分为各个数据段存储到内存中,并指定了输出可执行文件的起始代码段,这里是0xc1080000.

再往下500行以后的内容都是与芯片的系统架构相关的配置,uboot为了适应各种芯片,在这里罗列出了很多内核架构,我们只选择相关的就可以,寻找关键字arm926ejs保留这部分其他都可以删除。

以上便是uboot的总的makefile,而其他的子文件夹中的makefile都是为他服务的,各位在修改和裁剪uboot时,可以从这里下手,去其糟粕,取其精华即可。

-----------------------------------------------------------

start.s代码分析。从start.s中我们可以找到uboot程序的入口点 _start,uboot都是从这里开始执行第一条语句,0x0地址开始是ARM异常向量表,一上电的第一条指令是跳转到reset复位处理程序,进入SVC模式,跳入cpu_init_crit,在其中设置时钟源,调用lowlevel_init函数进行底层初始化,随后关闭MMU并使能I-Cache,再返回,然后开始relocate(重定位),并初始化堆栈,之后从这里进入C程序的入口_armboot_start,此处函数的实现在目录lib_arm/board.c中。

既然到了C程序中,那么我们是不是就有了发挥的余地了呢,我们可以在这里通过查AM1808的datasheet写上一个简单的点灯程序,当他下载到板子中运行的时候,会有相应的led被点亮或者闪烁,以增加之后开发的信心。但是,是不是像s3c2440那样直接配置了gpio口的寄存器,再给相应的地址位加上高低电平的变化,点灯就会成功了呢?对于AM1808来讲,答案是否定的,众所周知AM1808功能十分强大,它提供了十分丰富的外设接口以实现各种功能扩展,所以他的引脚是远远不够用的,这就采用了引脚复用的办法,我们要想把灯亮起来,还需加上gpio时钟的使能等初始化过程,具体可以查看数据手册PSC部分,祝好运。

到这里我想我们就算是把AM1808这块芯片启动起来了吧,其他的功能模块以及uboot的命令等都是C程序,你可以自行查看源代码进行增减.

参考文章出自《雨的印记》

http://308584349.blog.163.com/blog/static/206182274201241013436526/

基于AM1808粗略概要相关推荐

  1. 基于 Petri 网的软件过程支撑环境设计

    基于 Petri 网的软件过程支撑环境设计 基于 Petri 网的软件过程支撑环境设计 摘要 第 1 章 绪论 1.1 软件过程与过程建模 1.3 软件过程支撑环境现状 1.3 本课题的研究内容及意义 ...

  2. 基于迫零准则的自适应线性均衡器

    在数字通信系统中,码间串扰和加性噪声是造成信号传输失真的主要因素,为克服码间串扰,在接收滤波器和抽样判决器之间附加一个可调滤波器,用以校正(或补偿)这些失真.对系统中线性失真进行校正的过程称为均衡,实 ...

  3. 【Python】数据可视化基本套路总结

    真依然很拉风,简书<数据可视化>专栏维护者,里面有很多优秀的文章,本文便是其中一篇. 文章总结了多种数据可视化图形,并简要介绍了各种图形的作用,能为科研工作者在数据可视化阶段提供新的思路, ...

  4. Linux DRM Developer's Guide

    Linux DRM开发人员指南 http://landley.net/kdocs/htmldocs/drm.html Jesse Barnes Initial version Intel Corpor ...

  5. TinyML:下一轮人工智能革命

    来源:AI前线 作者:Matthew Stewart 译者:盖磊 策划:陈思 人工智能的一个趋势是正快速从"云端"走向"边缘".TinyML 是在海量的物联网设 ...

  6. 当程序员没了互联网,该如何继续学习写代码?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 编者按:现在很多时候,我们都是面向搜索(或 Google 或百度).GitHub 编程,那么 ...

  7. 贴近摄影测量 | 重建花山岩画只需两步!

    在祖国的西南边陲,左江两畔,分布着喀斯特作用形成的陡峭岩壁,而在绝壁之上,骆越人留下了他们的壮举--左江花山岩画. 骆越先民用赤铁矿为底,调制特殊的颜料进行绘制,风格古朴,笔触粗放,规模宏大,场景壮阔 ...

  8. Python-练习 43. 面向对象的分析和设计基础

    Python-练习 43. 面向对象的分析和设计基础 一个简单的游戏引擎分析 写或画出这个问题 抽取关键概念并予以研究 为这些概念创建类的层级结构和对象地图 编写类代码并通过测试来运行 ex43_cl ...

  9. Zookeeper与统一配置管理

    目录 统一配置管理简介 代码开发 注意:本文参考  什么是ZooKeeper? 基于zookeeper实现统一配置管理_菜 头的博客-CSDN博客_zookeeper统一配置管理 统一配置管理简介 比 ...

最新文章

  1. R语言ggplot2可视化使用lwd和flatten参数调整箱图(boxplot)线条的粗细:中位线和其他线条整体粗细比例更协调
  2. OpenStack 架构图
  3. 腾讯技术工程 | 腾讯数据平台部总监刘煜宏:这5大产品平台,展示了腾讯大数据的核心能力...
  4. Simulink仿真---SPWM算法
  5. 什么是 PureMVC 框架(提供下载)
  6. WordPress通过插件发送邮件
  7. LeetCode 996. 正方形数组的数目(回溯+剪枝)
  8. django-多级联动课堂版0912
  9. label怎么换行 vb_vb代码里如何换行啊?
  10. 华为设备配置VRRP,实现设备网关冗余备份
  11. shopnc route.php,shopnc自动结算的问题
  12. SAP中统驭科目理解及举例
  13. 朱建辉php,“神采·朱建辉版画艺术展”在尼泊尔加德满都开幕
  14. 满足功能安全要求的代码测试方案:Parasoft C++test
  15. 在线客服系统|物流行业解决方案——助力企业构建物流行业新一体化模式
  16. arcgis里dem填洼_基于多尺度窗口的DEM局部填洼方法
  17. 前端生产环境调试工具sourcemap的使用
  18. SD 格式化錯誤提示Windows無法完成格式化
  19. 新版本微信分享sdk(1.8.3)踩坑实录
  20. python生成曼德勃罗分形图形

热门文章

  1. projspider.com恢复对猪八戒,一品威客网,软件项目交易网的支持
  2. Astro VG876图像信号发生器控制软件
  3. OS X系统 手势终极设置方法+BetterTouchTool详细设置中文翻译
  4. 【在Angular项目中使用googlemaps】
  5. 关于pycharm中运行代码报错的解决思路
  6. 中山市公共汽车公司公交线路
  7. 苹果计算机转换,便携毕亚兹苹果计算机转换器,超极本的少接口都能转换身份...
  8. Python 基于pyecharts自定义经纬度热力图可视化
  9. Java8 Lambda 表达式官方文档
  10. 【Nav2中文网】一、入门