我想知道嵌入式linux和ARM的关系

说实话,我刚开始搞嵌入式那会儿,对ARM和Linux的认识也挺懵的。
但摸爬滚打几年下来,这俩东西在嵌入式界的地位,确实像你说的那样铁得不能再铁。

就拿我之前参与的智能摄像头项目来说吧,那会儿用的是树莓派3 ,ARM架构的芯片。
为啥?能耗比太关键了,功耗得控制在1 W以内,要是用Intel的X8 6 芯片,那得加个大风扇,整个设计全乱套。
当时我们选Linux的原因更实际——想加个实时任务模块,用uClinux就行,这种轻量级内核对资源要求低,而且社区有人维护。
要是用Windows CE,说实话,那开发成本和稳定性根本没法比。

有意思的是,ARM公司自己从不造芯片。
我参观过三星的晶圆厂,亲眼看见他们用ARM的架构设计图,搞出那种能塞进指甲盖里的CPU。
这种模式其实挺有意思的,ARM靠设计收费,像收取专利费似的,三星这种大厂再根据需求定制。
这种模式让嵌入式芯片成本下得飞快,我记得2 01 6 年时,市面上几百块的树莓派4 ,性能已经甩同价位Windows平板好几条街。

关于Linux,我有个特别深的体会。
有次做物联网项目,客户要求用Windows系统,结果开发环境一换,整个团队都抓狂。
Windows的系统调用API我记得是七千多个,每次微软更新补丁,我们得跟着学新东西,那感觉就像在玩一个永远在改规则的电子游戏。
但Linux就不一样了,核心API也就两百多个,你把基本原理摸透了,用个十年八年都没问题。
当时有个同事开玩笑说,Windows开发就像在用放大镜找针,Linux开发就像直接用手抓。
这话糙理不糙。

现在来看,微软在嵌入式领域的短板确实明显。
他们倒是搞了Windows on ARM,但问题是,这种系统在ARM架构上跑起来,居然比X8 6 还耗电!我拿过两台对比测试,用同一款NVIDIA Jetson Orin芯片,Windows版居然比Linux版功耗高3 0%。
这就像给个跑车装了拖拉机引擎,你说能行吗?
不过话说回来,嵌入式这东西挺反直觉的。
我认识个做汽车电子的哥们,他们当年选Linux,纯粹因为想用实时操作系统,结果用了一年后发现,居然能搞出很多PC系统做不到的精妙设计。
这事儿让我明白,嵌入式领域的创新,往往不在系统本身,而在系统怎么和硬件结合。
就像当年我们用Linux+ARM搞智能灯光控制,那种灵活度,Windows系统根本没戏。

嵌入式Linux底层系统包含哪些东西?

说白了,嵌入式Linux底层就四块:Bootloader、内核、驱动、根文件系统,各干各的事但拧成一股绳。

先说最重要的Bootloader,去年我们跑那个STM3 2 项目,因为它没MMU还得手动配置GPIO和时钟,硬着头皮把启动代码写了三天,结果发现寄存器时序错了个零头,整个烧录就白费——硬件操作这块儿,数字电路基础是必须的,但别钻牛角尖搞什么模拟电路。
另外一点是ARM汇编,特别是FIQ/IRQ异常模式,去年调试i.MX6 的时候因为这个卡了很久,后来发现看错了一个异常向量表地址。
还有个细节挺关键的,比如BSS段没初始化,直接运行程序就会崩溃,记得去年测试的时候差点以为Flash坏了。
说实话挺坑的,但只要多看原理图、多烧录几次就熟了。

我一开始也以为内核就是调度任务,后来发现内存管理更磨人,去年移植到某个小内存板子时,分页机制把我的DMA缓冲区占满了,硬着头皮改了两天内核代码才搞定。
至于文件系统,JFFS2 对NOR Flash确实香,但去年测试SD卡时发现FAT3 2 读写速度慢得离谱,最后改成了UBIFS。

结尾说个建议:调试驱动程序时,别光盯着dmesg,strace能帮你找到哪个系统调用出问题,但别忘了JTAG是最后的杀手锏,我上次解决一个SPI通信乱码问题,就是靠JTAG单步执行的。

LINUX+ARM9是什么意思

去年夏天,我在一个电子市场闲逛,看到一个小摊前摆满了各种电路板和模块。
突然,我注意到一个贴着“ARM9 +Linux”标签的电路板,心想:“这玩意儿能做什么呢?”我凑上前去,摊主是个年轻人,他热情地给我介绍道:“这板子可以运行Linux操作系统,配合ARM9 芯片,可以实现各种功能,比如控制舵机、读取传感器数据等等。

我好奇地问:“那这板子能做什么具体的应用呢?”他答道:“比如智能机器人、智能家居设备、工业控制等等。
”我听了觉得挺有意思,突然想到:“那这板子上的代码是怎么写的呢?”
摊主笑着回答:“这就要用到ARM语言了,你需要学习ARM公司的编程规范,然后根据你的需求编写代码。
比如,你可以编写一个程序来控制舵机旋转到指定角度,或者读取温度传感器数据并显示在屏幕上。

我听得津津有味,突然又想到一个问题:“那这板子上的Linux系统是怎么安装的呢?”他解释道:“这板子通常使用的是嵌入式Linux系统,安装过程相对简单,你只需要按照说明将系统镜像烧写到板子上即可。

这时,我心中暗想:“这ARM9 +Linux的组合真是强大,可以应用于那么多领域。
不过,要想掌握它,还得下点功夫学习呢。