单片机转Linux开发——小菜的一些分享

2019-07-20 06:18发布

Linux基础知识——偏硬件,适用于从单片机转过来的。文中很多地方都只是打个比方,不是专业文档。很多地方极度删减,只是给大家这么一个概念,知道嵌入式Linux开发的大致流程。 2016-8-21:懒人匠师 Linux基础知识... 1一、     什么样的硬件能跑Linux. 1二、     烧写方式的差异... 1三、     从无到有刷Linux到ARM... 11、回顾STM32跑Ucos系统... 12、烧写U-BOOT. 23、烧写Linux4、烧写文件系统 一、什么样的硬件能跑Linux和软件工程交流时可能会问到,你的Linux跑的芯片是X86的还是ARM的而不是问你的芯片是什么型号的?M几?A几?ARM几?因为一般学软件只分为这两种构架。Linux可以跑在X86的版本和ARM的版本。比如我们在电脑上可以直接装Linux,这个Linux就是X86构架的。在ARM上装的Linux就是ARM构架的,是不能混用的,而这个说的ARM和单片机时候的ARM又有点不同。平时说的ARM-M0M3M4M7,其实很难跑Linux的,应该不是说不能而是很不合适,因为没有一个叫EMCC的存储。一定要跑的话,可能系统都要装在TF卡里,然后从TF卡启动,而Linux内核还是比较大的,这样跑明显不太合适。能跑的一般叫ARM-A8A9等,这些一般都是多核的,带有EMCC的,内核代码一般放EMCC里。二、烧写方式的差异平时用ARM单片机的时候都习惯用仿真器烧写像JTAG之类。一般跑Linux很少这样烧写了(原则上也是可以这样烧写的,而且硬件平台也可以裸跑,像单片机一样)。Linux经常是用TF卡、USB、网口来烧写。三、从无到有刷LinuxARM1、回顾STM32Ucos系统前面说了,一般不用仿真器烧写Linux,那么单片机的朋友可能就疑惑了。硬件开启时怎么就知道要从你TF卡、USB、网络里读数据呢。难道原来就配置好了?确实是原来硬件上就配置好了,通过配置硬件管脚IO状态就可以设置是从TF启动还是内部的EMCC启动或者其他。学过STM32的朋友应该有印象,STM32也是有启动配置管脚的,可以配置成用串口下载,其实就是STM32官方原来固化了一个Bootloder引导程序在里面,用户配置硬件后就可以直接实现串口下载。可以复习一下STM32的APP部分,先用仿真器往STM32里烧写Bootloder,然后后面就可以根据Bootloder的内容实现串口、TF卡、USB、网络下载程序。多少两句,STM32跑Linux不合适、跑Ucos还是挺不错的,跑Ucos的时候我们可以这样做,写一个TF卡升级程序的Bootloader烧写进去,然后把编译好的Ucos放TF卡里,通过TF卡把Ucos烧到STM32里,这个Ucos我们做一些处理,可以将TF卡的某个程序拷进来运行。这时候我们再把一个FAT文件系统放TF卡里,插上TF卡,STM32就自动把TF卡里的FAT文件系统拷到内存里并且运行了。那么整个系统框图如下: file:///C:/Users/liangch/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png图3-1 STM32烧Ucos结构图大家可能会觉得,干嘛那么麻烦啊,我之前全部一次性用JTAG烧进去不就完了吗?在我们代码量少的时候是可以这样的,但是代码量大的时候,而且经常要升级维护的时候就经常得用这些看起来麻烦的构架,特别是分软硬件部门分工的时候。2、烧写U-BOOT前面啰嗦了这么多STM32的Ucos干嘛呢?因为Linux基本就是这个框架。下面回归正题说烧写Linux,那个ARM-Ax出厂的时候里面是空的,我们要先烧个Bootloader进去,这个在Linux这边一般叫U-BOOT。把硬件管脚配置成TF卡启动,把U-BOOT程序放在TF卡里,启动后,系统就启动了TF卡的U-BOOT,这时候我们通过串口,登录到这个U-BOOT里,执行一些指令,把TF卡里的U-BOOT烧写到ARM-Ax里的EMMC里,然后关闭,硬件上设置成EMCC启动,这样就是是把U-BOOT烧进去了。U-BOOT烧写进去一般很少修改了。3、烧写Linux这里一般是说烧写Linux内核,也叫做烧写Kernel。前面烧完U-BOOT再烧这个就比较简单了,放TF卡里,插入!登录U-BOOT,通过指令把Kerbel烧进去就OK了。 4、烧写文件系统注意拉,这里的文件系统不是STM32里的FAT啊,这个文件系统烧Android就是我们常说的android系统,QT就是QT系统,Ubuntu就是Ubuntu系统。而且这里是必须选一个文件系统的,因为Linux内核启动完之后必须挂至少一个文件系统,不像Ucos啊,Windows啊,可以不挂文件系统就跑。至于为什么呢?像我这样的菜鸟是不会去深究的。也是一样的用TF卡,进入U-BOOT,用指令烧进去。file:///C:/Users/liangch/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png图3-2 Linux系统基本框架 四、编译环境这个编译环境差别可就大啦啦啦啦啦!!我们用STM32的时候在Windows下装个MDK啊IAR啊什么的就可以编译C语言成二进制文件烧录了。但是Linux这个东东只能在linux的系统下编译,在Windows下有些文件名都不认的。我们一般在Windows下装个虚拟机,虚拟机上跑Linux。当然,也可以直接在电脑上装Linux,但是呢~有时候开发过程中很多有要回来Windows下比较好验证,所有还是装虚拟机吧~小样。这个Linux呢就是第一章说的那种跑在X86下的Linux咯,因为好像一般我们的电脑都属于X86构架的CPU吧。然后一般Linux内核挂个Ubuntu文件系统,大家比较省所以又叫做乌邦图系统。大家不要把Ubuntu系统和Linux系统看出两个不同的系统啊,这个不是并列关系,说出来会被一些高手(当然我还不是)看成很二的。装好乌邦图后,所有的U-BOOT啊,Kernel啊,文件系统啊,都在这里面编译。(主要是编译成ARM能用的文件啊,不是说把电脑上这个Linux烧到ARM里面去)。Inf、吐吐槽我原来也是STM32的忠实用户,一直认为STM32很好用,现在也这么认为。但是今年刚毕业,来到公司发现STM32不够用了,特别是图像处理和网络支持这块,资源很不够。做为一个做硬件的入职小菜,必须不断填充自己的知识视野,不认然有时在职场上会显得很乡巴佬的,这个文章是总结一下这段时间的学习。里面可能很多很LOW的错误,欢迎大家吐槽纠错。后续深入学习可能会更新一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。