之前参照《 从零使用qemu模拟器搭建arm运行环境》完成了嵌入式LINUX系统的编译,并在QEMU下运行起来了。
这是针对有MMU的CPU的嵌入式LINUX。
uClinux作为针对没有MMU的嵌入LINUX重要分支,因此也想一鼓作气,编译一个平台来试试。心酸啊,没有想到遇到许多的问题,花了很多的时间才搞定了一个平台。零零碎碎的将我的心路历程写出来。因为是事后凭借回忆写的,一些参考资料信息已经不知道在哪里去找了。
1、首先需要编译一个BOOTLOADER,
UBOOT是非常常见的一个bootloader. 支持的功能很强大(有必要搞这么强大吗,就一个引导程序)。
确实也存在一些介绍,只有很少的代码就能实现引导程序。还有一些介绍,甚至可以不使用引导程序,就可以将嵌入LINUX系统启动起来。(已忘记链接页面了)
UBOOT支持的CPU种类很多。我比较关注的CORTEX-M系列也有,使用u-boot-2018.07-rc1/arch/arm/mach-stm32/stm32f4对应的配置,完成了UBOOT的编译。
非常顺利。
2、首先下载一个uClinux-dist版本。
也很容易,通过官网http://www.uclinux.org/,再定位到uClinux-dist on SourceForge,上下载最新的版本 uClinux-dist-20160919.tar.bz2。
最新的版本都是2016年的了,当时就在想。uClinux现在还会被广泛使用吗,最近更新时间已是很久的2016年了。毕竟针对没有MMU的CPU,一般硬件成本都不高,支持的功能都不需要很强大。面向这种CPU的微内核操作系统已经很多了,比如Free OS , MBED OS 、华为的liteOS(国产的一定要提提,建议推广使用)等。这些操作系统上支持的软件模块也很多,很容易构建一个产品需要的软件系统。
但是不管这些了,还是编译一个uClinux系统吧。
3、下载工具链。
我首先关注的还是arm cortex-m3 \m4 系列,因此想找一个对应的工具链,来编译一个可在CORTEX-M系列芯片运行的uclinux
首先在网上搜了搜,希望能从一些蛛丝马迹中判断最新的工具链是什么,能从哪里下载。
但是很遗憾。网上介绍较多的都是较早版本的工具链,以及较早版本uclinux的编译和移植过程。
有支持CORTEX M的开发板和对应配套的工具链,但是找不到可下载的资源。比如CodeSourcery的工具链就是要收费的。当然人家说的也有道理,与其自己花很多时间编译一个工具链,还不一定好用,可能存在问题,不如花一点点money,买个好的工具链才是正道啊。
但我就是想搞个免费的开源的资源来弄弄,碰到问题也算是打怪涨点力了。
想找一个支持Cortex-M系统的编译工具链,没成功。
使用arm-linux-gnueabi工具链来编译,很悲催,发现最新的uclinux-dist VENDORS里没有支持cortex-m的,有点泄气。
既然要编一个uClinux,还是鼓足气作下去吧。
使用这个工具链,在编译uClibc库时遇到了问题。我想可能是因为该工具链使用的GCC库,也许存在问题吧。(这里没有继续去分析了),因此还是想找一个使用uclibc库的工具链。
这才注意到https://sourceforge.net/projects/uclinux/files/Tools/里有arm-uclinuxeabi-20160831最新的工具链。
下载了所有的资源。
也许是因为太想所有的东西都自己来搞搞,没有注意到里边有现成的已经编译好的工具链。执行arm-uclinux-uclibc-toolchain-5.4.sh脚本,开始编译工具链。
编译工具时主要遇到的问题是,
1)一些需要的软件包系统里没有,需要下载。
2)这个脚本是一个单顺序的执行过程,若其中一步出现了错误,每次执行都从头运行
其实这个很好搞定,看看这个脚本的最后部分,可以通过屏蔽相关的脚本,就可以按照自己的希望执行
3)有时解开的包需要根据编译错误修改
从网上找找资料,很容易解决的。
终于编过了。但其实自己心里是没谱的,不知道自己编译出来的工具链是否可以用。
这时才注意到已经有现成的编译好的工具链。
心想还是使用官网的吧,以免后续编译uClinux时出现莫名其妙的错误。
编译工具这个过程,也算是积累了经验,涨了点力值吧。