回 帖 发 新 帖 刷新版面

主题:ARM的开发步骤:看后开发思路会比较清晰了

做个最小系统板:如果你从没有做过ARM的开发,建议你一开始不要贪大求全,把所有的应用都做好,因为ARM的启动方式和dsp或单片机有所不同,往往会遇到各种问题,所以建议先布一个仅有Flash,SRAMSDRAMCPUJTAG、和复位信号的小系统板,留出扩展接口。使最小系统能够正常运行,你的任务就完成了一半,好在ARM的外围接口基本都是标准接口,如果你已有这些硬件的布线经验,这对你来讲是一件很容易的事情。2. 写启动代码,根据硬件地址先写一个能够启动的小代码,包括以下部分: 初始化端口,屏蔽中断,把程序拷贝到SRAM;完成代码的重映射;配置中断句柄,连接到C语言入口。也许你看到给你的一些示例程序当中,bootloader会有很多东西,但是不要被这些复杂的程序所困扰,因为你不是做开发板的,你的任务就是做段小程序,让你的应用程序能够运行下去。 3. 仔细研究你所用的芯片的资料,尽管ARM在内核上兼容,但每家芯片都有自己的特色,编写程序时必须考虑这些问题。尤其是女孩子,在这儿千万别有依赖心理,总想拿别人的示例程序修改,却越改越乱。 4. 多看一些操作系统程序,在ARM的应用开放源代码的程序很多,要想提高自己,就要多看别人的程序,linux,uc/os-II等等这些都是很好的原码。 5.如果你是作硬件,每个厂家基本上都有针对该芯片的DEMO板原理图。先将原理图消化。这样你以后做设计时,对资源的分配心中有数。器件的DATSHEET一定要好好消化。 6.如果做软件最好对操作系统的机理要有所了解。当然这对软件工程师来说是小菜一碟。但如果是硬件出身的就有点费劲。 问:做最小系统板是2层还是4层好? 答:只有AT91可以用两层板,其他的最少4层;44b0的地和电源处理好也可用两层板; 谈四层板和33欧电阻: 选用四层板不仅是电源和地的问题,高速数字电路对走线的阻抗有要求,二层板不好控制阻抗。33欧电阻一般加在驱动器端,也是起阻抗匹配作用的;布线时要先布数据地址线,和需要保证的高速线; 在高频的时候,PCB板上的走线都要看成传输线。传输线有其特征阻抗,学过传输线理论的都知道,当传输线上某处出现阻抗突变(不匹配)时,信号通过就会发生反射,反射对原信号造成干扰,严重时就会影响电路的正常工作。采用四层板时,通常外层走信号线,中间两层分别为电源和地平面,这样一方面隔离了两个信号层,更重要的是外层的走线与它们所靠近的平面形成称为"微带"(microstrip) 的传输线,它的阻抗比较固定,而且可以计算。对于两层板就比较难以做到这样。这种传输线阻抗主要于走线的宽度、到参考平面的距离、敷铜的厚度以及介电材料的特性有关,有许多现成的公式和程序可供计算。 33欧电阻通常串连放在驱动的一端(其实不一定33欧,从几欧到五、六十欧都有,视电路具体情况) ,其作用是与发送器的输出阻抗串连后与走线的阻抗匹配,使反射回来(假设解收端阻抗没有匹配) 的信号不会再次反射回去(吸收掉),这样接收端的信号就不会受到影响。接收端也可以作匹配,例如采用电阻并联,但在数字系统比较少用,因为比较麻烦,而且很多时候是一发多收,如地址总线,不如源端匹配易做。 这里梭说的高频,不一定是时钟频率很高的电路,是不是高频不止看频率,更重要是看信号的上升下降时间。通常可以用上升(或下降) 时间估计电路的频率,一般取上升时间倒数的一半,比如如果上升时间是1ns,那么它的倒数是1000MHz,也就是说在设计电路是要按500MHz的频带来考虑。有时候要故意减慢边缘时间,许多高速IC其驱动器的输出斜率是可调的. 构造嵌入式Linux Linux自身具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越嵌入式系统开发中的仿真工具(ICE)的障碍。内核的完全开放使人们可以自己设计和开发出真正的硬实时系统,软实时系统在Linux中也容易得到实现。强大的网络支持使得可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。 Linux提供了完成嵌入功能的基本内核和所需要的所有用户界面,它是多面的。它能处理嵌入式任务和用户界面。 一个小型的嵌入式Linux系统只需要下面三个基本元素: * 引导工具 * Linux微内核,由内存管理、进程管理和事务处理构成 * 初始化进程 如果要让它能干点什么且继续保持小型化,还得加上: * 硬件驱动程序 * 提供所需功能的一个或更多应用程序。 再增加功能,或许需要这些: * 一个文件系统(也许在ROMRAM)中 * TCP/IP网络堆栈 下面我们就从精简内核、系统启动、驱动程序将、X-Window换成MicroWindows四个步骤介绍嵌入式Linux的实际开发。 精简内核构造内核的常用命令包括:make configdepcleanmrproperzImagebzImagemodulesmodules_install。命令说明略。 现在举个例子说明一下: 我使用的是 Mandrake内附的 2.2.15。我没有修改任何一行程序码,完全只靠修改组态档得到这些数据。 首先,使用 make config 把所有可以拿掉的选项都拿得。 不要 floppy;不要SMPMTRR;不要 NetworkingSCSI;把所有的 block device 移除,只留下 old IDE device;把所有的 character device 移除;把所有的 filesystem 移除,只留下 minix;不要 sound 支援。相信我,我己经把所有的选项都移除了。这样做之后,我得到了一个 188K 的核心。 还不够小吗? OK,再加上一招,请把下列两个档案中的 -O3,-O2 -Os 取代。 ./Makefile ./arch/i386/kernel/ Makefile 这样一来,整个核心变小了 9K,成为 179K。 不过这个核心恐怕很难发挥 Linux 的功能,因此我决定把网络加回去。把General中的 network support 加回去,重新编 译,核心变成 189 K10K就加上个 TCP/IP stack,似乎是很上算的生意。 有stack没有driver也是枉然,所以我把 embedded board常用的RTL8139driver加回去,195K。 如果你需要 DOS 档案系统,那大小成为 213K。如果 minix ext2 换代,则大小成长至 222KLinux所需的内存大约在600K800K之间。1MB内存就可能可以开机了,但不太有用,因为连载入C程序库都有困难。2MB内存应该就可以 做点事了,但要到 4MB以上才可以执行一个比较完整的系统。 因为Linux filesystem 相当大,大约在 230K 左右,占了 1/3 的体积。内存管理占了80K,和核心其它部分的总和差不 多。TCP/IP stack 占了65K,驱动程序占了120KSysV IPC占了 21K,必要的话可以拿掉,核心档应该可以再小个10K左 右。 如果要裁剪核心大小,应该动那里呢? 答案很明显,当然是文件系统。Linux VFS简化了档案系统的设计,buffer cache, directory cache增加了系统的效率。但这些embedded系统根本就用处不大。如果可以把它们拿掉,核心可以马上缩小 20K 左右。 如果跳过整个 VFS,直接将文件系统写成一个 driver 的型式,应该可以将 230K缩减至50K左右。整个核心缩到100K左右。 系统启动 系统的启动顺序及相关文件仍在核心源码目录下,看以下几个文件: ./arch/$ARCH/boot/ bootsect.s ./arch/$ARCH/boot/setup.s ./init/main.c bootsect.S setup.S 这个程序是Linux kernel的第一个程序,包括了Linux自己的bootstrap程序,但是在说明这个程序前,必须先说明一般IBM PC开机时的动作(此处的开机是指"打开PC的电源")。 一般PC在电源一开时,是由内存中地址FFFF:0000开始执行(这个地址一定在ROM BIOS中,ROM BIOS一般是在FEOOOhFFFFFh),而此处的内容则是一个jump指令,jump到另一个位于ROM BIOS中的位置,开始执行一系列的动作。 紧接着系统测试码之后,控制权会转移给ROM中的启动程序(ROM bootstrap routine)。这个程序会将磁盘上的第零轨第零扇区读 入内存中,至于读到内存的哪里呢? --绝对位置07C0:0000(07C00h),这是IBM系列PC的特性。而位于Linux开机磁盘的 boot sector上的,正是Linuxbootsect程序。 把大家所熟知的MS DOS Linux的开机部分做个粗浅的比较。MS DOS 由位于磁盘上boot sectorboot程序负责把 IO.SYS载入内存中,而IO.SYS则负有把DOSkernel --MSDOS.SYS载入内存的重任。而Linux则是由位于boot sector bootsect程序负责把setupLinuxkernel载入内存中,再将控制权交给setup。 驱动程序 在Linux系统里,设备驱动程序所提供的这组入口点由一个结构来向系统进行说明。 设备驱动程序所提供的入口点,在设备驱动程序初始化的时候向系统进行登记,以便系统在适当的时候调用。Linux系统里,通过调用 register_chrdev 向系统注册字符型设备驱动程序。 在Linux里,除了直接修改系统核心的源代码,把设备驱动程序加进核心里以外,还可以把设备驱动程序作为可加载的模块,由系统管理员动态地加载它,使之成为核心的一部分。也可以由系统管理员把已加载的模块动态地卸载下来。Linux中,模块可以用C语言编写,用gcc编译成目标文件(不进行链接,作为*.o文件存在)。为此需要在gcc命令行里加上-c的参数。在成功地向系统注册了设备驱动程序后(调用register_chrdev成功后),就可以用mknod命令来把设备映射为一个特别文件。其它程序使用这个设备的时候,只要对此特别文件进行操作就行了。 将X-Window换成MicroWindows MicroWindows是使用分层结构的设计方法。允许改变不同的层来适应实际的应用。在最底一层,提供了屏幕、鼠标/触摸屏和键盘的驱动,使程序能访问实际的硬件设备和其它用户定制设备。在中间一层,有一个轻巧的图形引擎,提供了绘制线条、区域填充、绘制多边形、裁剪和使用颜色模式的方法。在最上一层,提供了不同的API给图形应用程序使用。这些API可以提供或不提供桌面和窗口外形。目前,MicroWindows支持Windows Win32/WinCE GDINano-X API。这些API提供了Win32X窗口系统的紧密兼容性,使得别的应用程序可以很容易就能移植到 MicroWindows上。

回复列表 (共2个回复)

沙发

有兴趣的朋友可以加QQ3380129414交流

板凳

什么牌子的手术台好手术无影灯 妇科手术台在什么价位手术台 外科手术灯都有哪些类型和样式手术床 无影手术灯 与普通照明灯的区别是什么啊无影灯 外科手术灯是由什么组成的电动手术台 手术灯的灯头有几种?电动手术床 医用无影灯与普通灯有什么区别综合手术台 上海北京用的最多的手术灯是什么手术室无影灯 手术室手术灯、电动床吊塔怎么选?多功能电动床 医用无影灯与普通灯有什么区别多功能手术台 手术灯为什么没有影子?医用手术台 医生手术头灯哪种好医用手术床 手术无影灯是什么?医用无影灯 手术台上方为什么有强灯?医用吊塔 LED手术灯如何调整高度LED手术灯 led手术灯与整体反射手术灯之间的优势是什么LED无影灯 什么叫手术台次LED手术无影灯 上手术台的专业是什么医用手术无影灯 上手术台的专业是什么医用电动手术台 液压手术床跟电机手术床有什么区别?液压手术台 上手术台的专业是什么多功能手术台 手术床与麻醉医生比例电动妇科手术台 

我来回复

您尚未登录,请登录后再回复。点此登录或注册