Linux On ARM开发纪要

    ARM的开发与X86还是有不少区别的,这里做了一些简单的介绍,以方便X86下的开发者能更快地切换到Linux on ARM的体系下面来。   

    ARM近年来的发展可谓如日中天,苹果和Android的使用是最为快速的推动力,而今Windows也支持ARM了,而更小型的树莓派和一些超低功耗模块也都有使用ARM的内核了。

    尽管微软已经耐不住寂寞,大部分使用ARM的设备还是Linux或是类Linux的系统内核,因为Linux的可裁剪性非常好,而且可用的资源非常非常多了。在“软件定义世界”的思路引领下,Linux on ARM必将是未来的大潮流。

    Linux on ARM与X86体系下的不同点是采用“设备”的概念,“X86下的BIOS”是可以自己烧进去的(就是那个启示时按个烧写键,就把引导区少到Flash的指定区域了,这个地址在给定板子上是不能变的),这个叫boot-loader,一般用的u-boot。当然,因为u-boot是开源的,因此出现了很多变体,但基本上都是大同小异。

    boot-loader启动后,就会跳转到下一个地址,开始载入Linux内核,这里头最重要的是文件系统。有了文件系统,就不用再去读写Flash的裸扇区了,而是通过文件系统进行数据文件的操作。然后将会进入命令行界面,有一个叫Busy-box的小程序把常用的一些命令都打包到了一起,使用起来更方便、体积更小、运行更快。这时候,几乎能干shell下能干的所有事情了。通过ssh就可以实现远程管理了。

    如果要进入图形界面,就需要运行一个X11的Server程序,还可以安装xrdp服务,然后通过“远程桌面”进行登录、管理,就跟运行一个普通的Linux桌面设备一模一样了。因为ARM的功耗和发热量都比较小,甚至大部分都不需要风扇散热、完全静音,非常适合各种设备的开发。以后的各种智能设备可能都会成为这个样子,其实就是一台运行Linux的电脑。

    既然是一台Linux电脑,那么开发软件也就很简单了。但是,且慢! 因为ARM的设备性能还是低一些,一般不适合拿来运行IDE,进行代码编辑、编译、打包等工作,所以一般就在PC机上建一个“交叉编译环境”,编译完程序,打成二进制包,再烧写进去。比如Android的ADK就是一套这样的工具集,可以完成编辑、调试、编译、打包等等工作。而OpenWRT是采用的另外一套思路,直接可以在X86上面编译生成多个版本的ipk文件,然后通过包管理程序下载安装即可(Android现在也有X86的版本了)。

    当然,这个步骤还是有点麻烦的。很多牛人直接运行Python或者LUA、JavaScript的脚本,可以直接在所有的平台上运行,现在基于ARM Cortex M0的脚本引擎都已经出来了(完全开源的,但还在发展中,有的功能还无法完全调用),比如NodeMCU、MicroPython等等。

    但要在嵌入式设备上得到完全相同的结果,命令行没有什么问题,图形界面就要费点劲了。可以通过支持HTML5的引擎来完成(这个已经蔚然成风了,如nodejs/PhoneGap/Kendo/React等等)。

    Ubuntu Touch通过QML完成类似的功能,使用的是QT来封装的,可以混合HTML和本地API调用,无论显示效果和一致性都是非常好的。

    如果以本地显示为主,还可以直接使用QT或者Pyqt进行开发,可以使用同一套代码,支持从时钟到工作站、集群级别的应用开发和运行(不同CPU和Linux内核版本需要重新编译,如果CPU和内核相同可以二进制兼容)。













郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。