。这些问题的结果通常是带来笑声。我们也经常看到,在Linux论坛中,询问Linux运行的最低要求是什么。常见的答案是Linux需要一个32位架构和一个MMU(
本项目旨在(并且成功)粉碎这些概念。下图中您所看到的开发板基于ATmega1284P。我(歪果仁)还制作了一块基于ATmega644a的开发板,也同样获得了成功。该开发板没有使用其他处理器,启动Linux 2.6.34内核。事实上,它甚至可以运行一个完整的Ubuntu栈,包括X(如果你有时间等它启动)和gnome。
是的,没错,完整的Linux安装需要数兆字节的RAM和32位带有MMU的CPU。本项目拥有这一切。首先,让我们访问RAM。正如您所看到的,在电路中有一块古董级的30引脚SIMM内存模块。这些是基于80286的PC曾经使用的。它通过接口和ATmega连接,我写代码来访问它并按照规格刷新它(SDRAM需要恒定速率刷新以避免丢失数据)。它到底有多快呢?刷新中断每62ms发生一次,占用时间1.5ms,因此占用3%以下的CPU。访问RAM,为了便于编程,一次访问一个字节。这样产生的最大带宽约为300KBps。
对于RAM需要工作在休眠状态,我们有两件事要处理。存储并不是太难解决的问题。使用SPI可以十分容易的与SD卡交互,我的项目中做到了这一点。一个1GB的SD卡可以工作的很好,虽然512MB就已经满足这一特殊的文件系统(Ubuntu Jaunty)。ATmega拥有一个硬件SPI模块,但无论出于何种原因,它工作的不是十分顺畅,因此我将这个接口进行位拆裂。它仍然足够块——大约200KBps。这对项目来说还非常有意义——它能够在有足够管脚的任何微控制器上实现,而不用使用其他硬件模块。
所有剩下的就是那个32位CPU和MMU需求。不过AVR没有MMU,并且它是8位的。为了克服这一困难,我编写了一款。ARM是我最熟悉的架构,并且它足够简单,可以让我很舒服的为它编写出一个仿真器。为什么要编写一个,而不是移植一个呢?好吧,移植别人的代码是没有乐趣的,再加上我看到没有将仿线位设备上的书面资料。原因之一:AVR编译器坚持16位处理整数将会给你带来麻烦,如简单的“(1《《20)”,产生0。你需要用“1UL《《20”。不必要的说,困扰其他人的未知基本代码寻遍所有的地方,整数都被假定并将会失败,这将是一个灾难。另外,我想用这个机会编写一款很好的模块化ARM仿真器。所以我付诸行动。
电路板通过一个串行端口和真实世界进行通信。目前,它通过串行端口连接到我PC运行的minicom上,但是它可测的替代连接是连接到电路上的一个键盘和一个字符LCD,可以使其完全独立。电路板上还有两个LED。它们指示SD卡的访问情况。一个代表读操作,一个代表写操作。电路板上还有一个按钮。当按下并按住1秒时它将使串行端口脱离仿真的CPU的当前有效速度。AVR的主频是24MHz(超过原有20MHz的轻微超频)。
uARM肯定没有速率守护进程。它花了大约2个小时启动到BASH提示符(“init=/bin/bash”内核命令行)。然后用4个多小时启动整个Ubuntu(“exec init”然后登陆)。启动X将消耗更长时间。有效的仿线KHz,这与你期望的在一个可怜的8位微控制器上仿线位CPU和MMU是同等的水平。奇怪的是,一旦启动,该系统是有些可用的。您可以输入一个命令,并在一分钟之内得到答复。也就是说实际上你是可以使用它的。比如,今天我还用它来格式化我的SD卡。这绝对不是最快的,但我觉得它可能是最便宜、最慢、最简单的手工组装、最低的部件数量以及最低端的Linux PC。电路板是使用导线手工焊接的,甚至没有使用印刷电路板PCB)的必要。
仿真器是相当模块化的,允许它随意扩展仿真其他SoC(片上系统)和硬件配置。仿线TE。前一段时间,我开始进行支持ARMv6的工作,但是一直没有完成(从代码中可以看出来),因为不是很需要。仿线。由于模块化的设计,你可以替换SoC.c文件,并使用相同的ARMv5TE核心编译一个完整的新的SoC,或者替换核心,或者按照意愿替换外设。这是有目的的,我的意思是这个代码也是一个关于ARM SoC如何工作的相当整洁的范例。CPU仿真器自身的代码并不是太整洁,那么,好吧,它是一个CPU模拟器。这是几年前花了超过6个月的空闲时间写的,然后就放在一边了。它最近复活是专门为了这个项目。仿真器实现了i-cache来提高速度。这给予了AVR很多帮助,使内部存储器能够以超过每秒5MB的速率访问,而不像我的外部RAM。我还没有抽出时间去实现d-cache(数据缓存),但是这已经在我的待办事项列表上了。访问块设备没有被仿真为SD设备。事实证明这太慢了。取而代之的是一个准虚拟化磁盘设备(pvdisk,参见pvDisk.tar.bz2,GPL许可证),我编写的时候使用了一个无效的操作码来调入仿真器并访问磁盘。我的镜像中的ramdisk(虚拟磁盘)加载这个pvdisk,然后改变根目录到/dev/pvd1。
ramdisk被包含在了“rd.img”中。我使用的“机器类型”是PalmTE2。为什么?因为我非常熟悉这款硬件,它是我见到的第一款PXA255机器类型。
有一些服务你可以通过使用一个特殊的操作码向仿真器发出请求。在ARM中它是0xF7BBBBBB,在Thumb中它是0xBBBB。挑选这些是由于它们所在的范围ARM保证是未定义的。超级调用号码通过寄存器R12被传递,参数通过寄存器R0-R3被传递,返回值被放置在R0中。
· 4 = 块设备操作(R0 = 操作,R1 = 扇区(sector)号)。请注意,这些不写入仿真的RAM,它们使用另一个超级调用填充了仿真用户访问的仿真器内部缓冲区,一次一个字。我的意思是实现
· 0 = 获取信息(如果扇区号是0,返回扇区的数量;如果扇区号是1,以字节位单位返回扇区大小)
· 5 = 块设备缓冲区访问(R0 = 值输入/值输出,R1 = 字数,R2 = 如果写入为1,其他情况为0)
完全支持Thumb。我欺骗了一下,解码每个Thumb指令字符串(instr)为等价的ARM指令字符串并执行,以此代替使用ARM仿真器函数。它不像它原来一样快,但是它简单并且代码小巧。可以使用256KB的查找表,但是我感觉256KB对于微控制器的闪存来说太大了。一些Thumb指令不能被转换为ARM指令,它们被正确处理代替。
这个代码有点儿乱,但是它可以工作(代码国内无法下载)。要在PC上建立仿真器并进行尝试输入“make”。要运行使用“。/uARM DISK_IMAGE”。要建立优化的PC版本使用“make BUILD=opt”。要建立AVR运行的版本使用“make BUILD=avr”。现在,它的编译目标是ATmega1284P。要以ATmega644为编译目标,除了要修改makefile,减少icache.h中的数字以便于i-cache足够小来配合644内部的RAM。在归档文件中还包括用于1284p最终的hex文件。
”总共50字节:8字节用来选择Thumb模式,一些Thumb代码要读取SD卡的第一个扇区并跳到Thumb模式(参看embeddedBoot.c)。SD卡的MBR有另一个bootloader(在Thumb模式下写入)。这个bootloader看着MBR,找到活动分区并加载它的内容到RAM的末尾。然后,它跳到目的RAM地址+512(参看mbrBoot.c)。这里运行着第三个,也是最大的bootloader,ELLE(参看ELLE.c)。这个bootloader重新定位了ramdisk,建立ATAGS,并调用内核。我提供了所有的二进制文件和源代码以便于大家能够按照意愿制作您自己镜像。启动过程会让人回忆起PC开机。:)包含的mkbooting.sh工具可以用来制作用于启动分区的工作镜像。收藏
如果光看存储器这个名字的话,可能很多人会把它们都当作U盘、存储卡、硬盘等永久存储数据的器件,其实....
这一年来,国产OS系统异常火爆,统信软件的UOS成为股市的香饽饽,而两大麒麟Linux合并的麒麟软件....
这一年来,国产OS系统异常火爆,统信软件的UOS成为股市的香饽饽,而两大麒麟Linux合并的麒麟软件....
2020年是一个特别的年份,一场让全人类措手不及的新冠疫情,几乎打乱了所有人和所有企业的原有计划。疫....
微软推送Windows 10 build 19603 编译版本 引入面向Linux子系统的文件资源管理器集成
微软刚刚向开启了快速更新(Fast Ring)通道的 Insider 测试者们推送了 Windows....
我用的MCU是TI的Cortex M3 9B92,我想知道在MCU掉电之后,我怎样做就能够保存之前程序运行时的数据。...
以前有人遇到过这样的问题吗? / ********* root @ rfswhz-HP:/home/rfswhz/Desktop/mypetalinux/Xilinx-ZC706-2015.2#...
采用TI的LM3S5791作为我的手持设备的主控MCU,先咨询下ARM的管脚复用及配置问题
你好: 我采用的是TI的LM3S5791作为我的手持设备的主控MCU,我看到这款MCU的...
Windows 10最新预览版首次集成Linux子系统 可直接对Linux系统进行文件管理和访问
继上周四的Build 19592后,微软今晨面向快速通道的Insider会员推送Windows 10....
MRAM是一种使用电子自旋来存储信息的存储技术(MRAM设备是Spintronics设备)。MRAM....
原始的手机软件平台开发方式不仅效率低,而且对开发人员的技术水平的要求较高,需要经过大量的培训才能胜任,这必然会增加产品的...
提到内存,相信大家都不陌生,几乎所有的计算机系统中都有它的身影,按照内存的工作原理划分,可将内存分为....
如何在Linux 系统下尽量减少内核信息的暴露,增加有难度的反逆向手段来提升破解难度,对加壳保护程序进行很好的隐藏,都是目前主...
Linux2.6引入了基于对象的反向映射机制,这种方法为物理页面设置一个用于反向映射的链表,但是链表上的节点并不是引用了该物理页...
本文研究的这种控制系统,可以采用多种网络进行通信,包括WiFi、GPRS和GSM三种网络。利用Android底层基于Linux系统实...
恩智浦和微软共同展望,此次合作将降低开发人员的生产成本,帮助他们更快地将新的工业和物联网边缘应用推向....
微软发布了有关该公司一直致力的 Linux 内核新项目的详细信息。该项目名为 Integrity P....
物联网的出现为社会带来了许多潜在的好处,这其中包括家庭自动化、环境监测、工业4.0以及更长远的智能城....
采用VTI 公司生产的SCA100t 双轴倾角传感器和C8051F 系列单片机构成的数字倾角传感器,工作可靠,测量精度高。论文中主要...
软硬件协同设计(Hardware/Software Co-deaign)是在20世纪90年代兴起的跨领域交叉学科。随着超大规模集成电路制造工艺的进步,...
全新RX72N和RX66N提供高达4MB片上闪存,可达到业界最高的120MHz读取频率,同时具备1M....
据外媒 AndroidPolice 报道,目前还在开发者频道的 Chrome OS 83 获得了更新....
在新型 RAM 技术中,MRAM对物联网和边缘计算设备具有特别有吸引力。因为它能实现比目前这类硬件上....
MM32L073使用高性能的ARMCortexTM-M0为内核的32位微控制器,最高工作频率可达48....
随着MCU应用开始要求提供更高的数字信号处理(DSP)性能,Arm推出Cortex-M4以满足市场的....
全球性疫情对于产业链遍布全球的半导体来说,是一个大大的黑天鹅。随着国外疫情影响严重,已经有部分海外的....
近日,全球最大的专利保护社区OIN和华为共同宣布,华为已经成为OIN社区的被许可方和成员。
华为是 Linux 基金会和其他开源组织的长期成员,包括 OpenStack 基金会和云原生计算基金....
TWS耳机是近两年比较热门的一款产品,其技术实现是基于蓝牙芯片技术的发展,工作原理为通过手机蓝牙连接....
最新美国媒体消息,国科技巨头三星(Samsung)周二表示,截至3月底的三个月营业利润可能较一年前有....
一、嵌入式硬件开发:熟悉电路等知识,非常熟悉各种常用元器件,掌握模拟电路和数字电路设计的开发能力。熟....
AT7456E 是一款可以工作在 3.3V 下的改进型 OSD 芯片,其外围电路完全兼容 AT745....
现在很多人都在诟病Linux内核协议栈收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正....
在一个多员共用的开发环境或者一台服务器运行多个逻辑隔离的服务器进程。谁的运行环境也不希望影响到另一个....
主存(RAM) 是一件非常重要的资源,必须要认真对待内存。虽然目前大多数内存的增长速度要比 IBM ....
全球第二大内存制造商SK海力士(SK Hynix)为台式机性能更高的粉丝带来了令人振奋的消息:他们目....
作为一枚Linux嵌入式程序猿,写shell脚本也是经常碰到的工作,在这个过程中或多或少踩过一些坑,....
我们向作者们询问了他们最喜欢的终端技巧。他们分享了一些节省时间的技巧,甚至还有一个有趣的终端彩蛋。你....
MCU接口方式:显示数据写入DDRAM,常用于静止图片显示。RGB接口方式:显示数据不写入DDRAM....
接口总线为一群互相连接的设备提供一种有效的通信方式,它是自动测试系统发展的标志,可以说接口总线技术发....
我们继续上篇没有讲完的嵌入式Linux启动时间优化方法,本文主要会讲文件系统。想看上一篇的请查看本文....
Red Hat Enterprise Linux (RHEL) 7.8 已发布,这是 RHEL 7 ....
智慧城市提供的服务越来越多,而用于收费的服务也逐渐增多。随着城市物联网(IoT)基础设施不断扩展,当....
在准备降低系统的启动时间时,思路上应建立以下的切入点: 最快的代码是未执行的代码。 ....
2019年10月24日,也就是“1024程序员节”的时候,腾讯突然发布了Linux系统版本的QQ,官....
支持AI人工智能和ML机器学习部署的数据中心依靠基于图形处理单元(GPU)的服务器为其计算密集型架构....
Hadoop 是一个分布式系统基础架构,在大数据领域被广泛的使用,它将大数据处理引擎尽可能的靠近存储....
BS83A04C于工作电压3V下平均工作电流不到3μA即可实现4个触摸键的侦测,同时还具有高抗干扰特....
说起国产OS操作系统,统信软件旗下的统一操作系统UOS无疑是近期最为活跃的一个,软硬件适配越来越广泛....
Swift 开发团队表示,其即将推出的 5.3 版本的目标包括“增加对 Windows 和其他 Li....
Linux Mint项目负责人Clem Lefebvre今天宣布:Linux Mint 20的内部代....
据介绍,统信UOS沿用了中国团队研发的深度操作系统,支持33种语言,累计下载量超过8000万次,志愿....
国民技术舒晓华从磁场定向控制(FOC)理论基础和多FOC应用软件设计要求的角度,分享了国民技术多FO....
电子发烧友网报道(文/黄晶晶)近日,兆易创新发布2019年年报,全年实现营业收入32.03亿元,同比....
基本的Linux根文件系统是Unix文件夹目录层次结构,skeleton是构建根文件系统的基础。 ....
《C指针编程之道》由孔浩、张华杰、陈猛编著,是一本帮助程序员提高编程素养的图书,书中结合开发人员多年....
如其官网上所述,具有十大黄金法则:小巧、快速、简单、可移植、可配置、可调试、易用、可维护、优雅、开源....
The Register 报道称,为努力扩大支持 Swift 编程语言的平台数量,5.3 版本将覆盖....
C2000™32位微控制器在处理,传感和驱动方面进行了优化,可提高实时控制应用中的闭环性能,例如工业电机驱动,光伏逆变器和数字电源,电动车辆与运输,电机控制以及传感和信号处理.C2000产品线包括Delfino™高端性能系列和Piccolo™入门级性能系列。 TMS320F2807x微控制器平台属于Piccolo™系列,适用于高级闭环控制应用,例如工业电机驱动,光伏逆变器和数字电源,电动车辆与运输以及传感和信号处理。数字电源和工业驱动器的完整开发包作为powerSUITE和DesignDRIVE方案的一部分提供。 F2807x是基于TI行业领先的C28x内核的32位浮点微控制器。此内核的性能通过三角运算硬件加速器得到了提升,该加速器利用CPU指令(如正弦,余弦和反正切函数)提高了转矩环路和位置计算中常见的基于三角运算的算法性能。 F2807x微控制器系列采用一个CLA实时控制协处理器.CLA是一款独立的32位浮点处理器,运行速度与主CPU相同。该CLA会对外设触发器作响响应,并与主C28x CPU同时执行代码。这种并行处理功能可有效加倍实时控制系统的计算性能。通过利用CLA执行时间关键型功能,主C28x CPU可以得到释放,以便用于执行通信和诊断等其...
TI AM437x高性能处理器基于ARM Cortex-A9内核。 这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。 这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。 这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。 处理器子系统基于ARM Cortex-A9内核,PowerVR SGX图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。 可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...
CC3200MOD Simplelink Wi-Fi CC3200 片上因特网无线 MCU 模块
使用业界首款可编程FCC,IC,CE和Wi-Fi认证无线微控制器(MCU)模块,内置Wi-Fi,开始您的设计连接。 Simplelink CC3200MOD专为物联网(IoT)而创建,是一个集成了ARM Cortex-M4 MCU的无线MCU模块,允许客户使用单个设备开发整个应用程序。凭借片上Wi-Fi,互联网和强大的安全协议,无需先前的Wi-Fi体验即可加快开发速度。 CC3200MOD将所有必需的系统级硬件组件(包括时钟,SPI闪存,RF开关和无源元件)集成到LGA封装中,以便于组装和低成本PCB设计。 CC3200MOD作为完整的平台解决方案提供,包括软件,样本应用,工具,用户和编程指南,参考设计以及TI E2E支持社区。 应用MCU子系统包含行业标准的ARM Cortex- M4内核以80 MHz运行。 该器件包括各种外设,包括快速并行相机接口,I2S,SD /MMC,UART,SPI,I2C和四通道ADC。 CC3200系列包括用于代码和数据的灵活嵌入式RAM;带外部串行闪存引导程序和外设驱动程序的ROM;用于Wi-Fi网络处理器服务包,Wi-Fi证书和凭证的SPI闪存。 Wi-Fi网络处理器子系统具有Wi-Fi片上网络,并包含一个附加功能专用的ARM...

