ARM的开发步骤

Qemu虚拟arm开发驱动开发详解(一)——驱动基本架构 此前在系列文章中,我们已建立好Linux最小系统的运行环境,并将其成功移植到了由Qemu模拟的arm32开发板上。接下来将介绍如何基于上述环境进行驱动开发。本节主要带各位读者了解Linux内核驱动的基本架构,并在WSL的Ubuntu22.04子系统下实现基于x86操作系统的简易Linux驱动“HelloWorld”。 阅读详情
ARM的开发步骤

ARM的开发步骤
1. 做个最小系统板:如果你从没有做过ARM的开发,建议你一开始不要贪大求全,
把所有的应用都做好,因为ARM的启动方式和dsp或单片机有所不同,往往会遇到各种问题,
所以建议先布一个仅有Flash,SRAM或SDRAM、CPU、JTAG、和复位信号的小系统板,留出扩展接口。
使最小系统能够正常运行,你的任务就完成了一半,好在ARM的外围接口基本都是标准接口,
如果你已有这些硬件的布线经验,这对你来讲是一件很容易的事情。

2. 写启动代码,根据硬件地址先写一个能够启动的小代码,包括以下部分:
初始化端口,屏蔽中断,把程序拷贝到SRAM中;完成代码的重映射;配置中断句柄,
连接到C语言入口。也许你看到给你的一些示例程序当中,bootloader会有很多东西,
但是不要被这些复杂的程序所困扰,因为你不是做开发板的,你的任务就是做段小程序,
让你的应用程序能够运行下去

3. 仔细研究你所用的芯片的资料,尽管ARM在内核上兼容,但每家芯片都有自己的特色,
编写程序时必须考虑这些问题。尤其是女孩子,在这儿千万别有依赖心理,
总想拿别人的示例程序修改,却越改越乱。

4. 多看一些操作系统程序,在ARM的应用开放源代码的程序很多,要想提高自己,
就要多看别人的程序,linux,uc/os-II等等这些都是很好的原码。

6.如果你是作硬件,每个厂家基本上都有针对该芯片的DEMO板原理图。先将原理图消化。
这样你以后做设计时,对资源的分配心中有数。器件的DATSHEET一定要好好消化。

7.如果做软件最好对操作系统的机理要有所了解。当然这对软件工程师来说是小菜一碟。
但如果是硬件出身的就有点费劲。

问:做最小系统板是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微内核,由内存管理、进程管理和事务处理构成
  * 初始化进程
  如果要让它能干点什么且继续保持小型化,还得加上:
  * 硬件驱动程序
  * 提供所需功能的一个或更多应用程序。
  再增加功能,或许需要这些:
  * 一个文件系统(也许在ROM或RAM)中
  * TCP/IP网络堆栈
  下面我们就从精简内核、系统启动、驱动程序将、X-Window换成MicroWindows四个步骤
介绍嵌入式Linux的实际开发。

  精简内核
  构造内核的常用命令包括:make config、dep、clean、mrproper、zImage、bzImage、
modules、modules_install。命令说明略。

  现在举个例子说明一下:
  我使用的是 Mandrake内附的 2.2.15。我没有修改任何一行程序码,完全只*修改组态档
得到这些数据。

  首先,使用 make config 把所有可以拿掉的选项都拿得。
不要 floppy;不要SMP、MTRR;不要 Networking、SCSI;
把所有的 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 K。10K就加上个 TCP/IP stack,
似乎是很上算的生意。

  有stack没有driver也是枉然,所以我把 embedded board常用的RTL8139的driver加回去,195K。
  如果你需要 DOS 档案系统,那大小成为 213K。如果 minix 用 ext2 换代,则大小成长至 222K。
  Linux所需的内存大约在600K~800K之间。1MB内存就可能可以开机了,但不太有用,
因为连载入C程序库都有困难。2MB内存应该就可以做点事了,
但要到 4MB以上才可以执行一个比较完整的系统。

  因为Linux 的filesystem 相当大,大约在 230K 左右,占了 1/3 的体积。内存管理占了80K,
和核心其它部分的总和差不多。TCP/IP stack 占了65K,驱动程序占了120K。SysV 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一般是在FEOOOh到FFFFFh中),而此处的内容则是一个jump指令,jump到另一个
位于ROM BIOS中的位置,开始执行一系列的动作。

  紧接着系统测试码之后,控制权会转移给ROM中的启动程序(ROM bootstrap routine)。
这个程序会将磁盘上的第零轨第零扇区读入内存中,至于读到内存的哪里呢?
--绝对位置07C0:0000(即07C00h处),这是IBM系列PC的特性。

而位于Linux开机磁盘的boot sector上的,正是Linux的bootsect程序。

  把大家所熟知的MS DOS 与Linux的开机部分做个粗浅的比较。MS DOS 由位于磁盘上
boot sector的boot程序负责把IO.SYS载入内存中,而IO.SYS则负有把DOS的kernel --MSDOS.SYS
载入内存的重任。而Linux则是由位于boot sector 的bootsect程序负责把setup及Linux的kernel载入内存中,
再将控制权交给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 GDI和Nano-X API。这些API提供了Win32和X窗口系统的紧密兼容性,使得别的应用程序可以很容易就能移植到MicroWindows上。
  何谓嵌入式系统
  嵌入式系统被定义为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可*性、成本、体积、功耗严格要求的专用计算机系统。
  嵌入式系统是面向用户、面向产品、面向应用的,如果独立于应用自行发展,则会失去市场。嵌入式处理器的功耗、体积、成本、可*性、速度、处理能力、电磁兼容性等方面均受到应用要求的制约,这些也是各个半导体厂商之间竞争的热点。嵌入式处理器的应用软件是实现嵌入式系统功能的关键。软件要求固化存储,软件代码要求高质量、高可*性,系统软件(OS)的高实时性是基本要求。
  在制造工业、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等方面均是嵌入式计算机的应用领域。

 
ARM+linux驱动开发步骤的简单演示       碰到一个问我怎么写驱动的师弟,其实我也不懂,更不懂怎么和他说了。要学的还有很多,具体的驱动框架需要他去看了,理解内核机制我也需要抽时间去琢磨。由于前面做过,就整理一下前面做过的文档,从头到尾演示一下,步骤而已,简单的说,就是操作演示,至于调试啊,那是代码的事情了。直接贴出以前的文档如下:************************************************************************************************由于近段时间还要继续 阅读详情

相关推荐

ARM嵌入式开发入门必要步骤

ARM嵌入式开发嵌入式开发领略比较热门的技术,本文针对ARM嵌入式开发的入门者给出嵌入式开发的基础知识和入门必要步骤。 1. 做个最小系统板:如果你从没有做过ARM嵌入式开发,建议你一开始不要贪大求全,把所有的应用都做好,因为ARM的启动方式和dsp或单片机有所不同,往往会遇到各种问题,所以建议先布一个仅有Flash,SRAM或SDRAM、CPU、JTAG、和复位信号的小系统板,留出扩展接口。使最小系统能够正常运行,你的任务就完成了一半,好在ARM的外围接口基本都是标准接口,如果你已有这些硬件的..

zzxyd_qiao的博客 1506

嵌入式ARM嵌入式系统开发流程概述

在宿主机上编译好目标代码后,通过宿主机到目标机的调试通道将代码下载到目标机,然后由运行于宿主机的调试软件控制代码在目标机上运行调试。软件模拟环境也称为指令集模拟器IIS(Instruction Set Simulator),在很多时候为保证项目进度,硬件和软件开发往往同时进行,这时作为目标机的硬件环境还没有建立起来,软件的开发就需要一个模拟环境来进行调试。开发计算机一般称宿主机,嵌入式设备称为目标机,在宿主机上编译好的程序,下载到目标机上运行,交叉开发环境提供调试工具对目标机上运行的程序进行调试。

timerring的博客 5410

ARM入门:ARM开发指南

ARM架构的特点包括低功耗、高效能和灵活性,使其成为移动设备和嵌入式系统的首选。ARM架构具有广泛的应用领域和强大的灵活性,使得它成为嵌入式系统和移动设备开发的首选。通过搭建合适的开发环境、编写ARM程序和使用相关的工具和框架,您可以开始进行ARM开发并探索更多的应用场景。d. 物联网(IoT):由于ARM处理器具有低功耗和高性能的特点,它被广泛用于物联网设备的开发。a. Keil MDK:Keil MDK是一款广泛使用的ARM开发工具套件,提供了集成的开发环境、编译器和调试器。

HdData_Science的博客 1903

【笔记】ARM M3-M4权威指南第二章《嵌入式软件开发介绍》

CMSIS(Cortex Microcontroller Software Interface Standard)是由ARM推出的一套软件接口标准,旨在提供一致的软件接口和开发工具链支持,简化嵌入式系统的开发过程。名称定义、外设寄存器的地址定义以及包括中断分配、异常向量定义等的系统设计,这是设备相关的(注意:同一家供应商的多个设备可能会使用同一组文件)由设备供应商定义。名称定义、地址定义以及访问内核寄存器和内核外设的辅助函数,这是处理器相关的,由ARM提供。

weixin_43589294的博客 1307

ARM架构与嵌入式系统开发全流程教程

本文还有配套的精品资源,点击获取 简介:ARM架构因其低功耗、高性能和灵活性而广泛应用于嵌入式系统、移动设备等多种计算平台。本教程将深入介绍ARM处理器的类型,包括Cortex系列、ARMv8-A架构,以及Thumb和Thumb-2指令集。同时,涵盖ARM编程基础知识,包括汇编语言、C/C++编程和软件开发工具链,以及嵌入式系统中的应用和入门级教程,帮助初学者逐步掌握ARM...

weixin_30978239的博客 4545

使用ARM开发详细步骤

使用ARM开发详细步骤一、编译QTE库一般,如果你要做Qt/Embedded的开发,最好把Qt/Embedded编译成为两个版本,一个是主机版,一个是目标版。1.         下载QTE在获得Qt/Embeded的源码(free版的源码可在www.trolltech.com下载)之后,将其分别解压到两个目录(比如:/qte/qte-3.3.4-host/和:/qte/qte-3

帆子的技术的专栏 3154

ARM开发学习步骤

1、做个最小系统板:如果你从没有做过ARM开发,建议你一开始不要贪大求全,把所有的应用都做好,因为ARM的启动方式和dsp或单片机有所不同,往往会遇到各种问题,所以建议先布一个仅有Flash,SRAM或SDRAM、CPU、JTAG、和复位信号的小系统板,留出扩展接口。使最小系统能够正常运行,你的任务就完成了一半,好在ARM的外围接口基本都是标准接口,如果你已有这些硬件的布线经验,这对你来讲是一件...

weixin_33827731的博客 299

arm-linux 开发步骤

ARM-Linux开发步骤 拿到一块YC2440(s3c2440)的开发板,经过几天的学习,我对arm-linux系统开发步骤有了一些认识。就以开发这个开发板为例,arm-linux开发工作大概分4个部分 1.       硬件(hardware) 2.       引导加载器(bootloader) 3.       内核(kernel) 4.       文件系统(file

空山新雨后 8097
上一篇: 初学者理解linux文件系统
下一篇: ARM简介及编程
laurenceliu
博客等级 码龄19年 2粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值