第四章:Linux嵌入式程序分类
前言
前面已经介绍了虚拟机和linux的安装,这部分仅仅是环境的搭建,和咱们的嵌入式开发没有半毛钱关系。所以不用费劲吧啦的去看什么linux之类的,咱们也就是用这个系统提供的东西,至于怎么弄,你买了开发板之后都会告诉你,至于什么指令之类的,也就那几个,现在都不用管。等你大致知道整个流程之后再回头去看,这个时候才能看懂。当然也不排除开始就能看懂的,反正我是从头开始看看了好几年都没有入门,不知道咋弄到开发板上。
Linux系统就是台电脑,先接受这个设定。咱们需要的是嵌入式的东西,和电脑没啥关系。下面我都用最容易懂的方式介绍各个东西,说的不准确的话请理解,只要能懂整个东西就行。细节的东西将来小伙伴可以自己去斟酌。
第一章 思路
介绍大致流程:
(1)介绍嵌入式硬件上跑的文件;
(2)介绍这些文件怎么搞过来的;
(3)介绍怎么烧写进去。
第二章 嵌入式硬件文件(先以飞凌的imx6ul为例,然后国产龙芯LS2K1000)
前面也介绍过嵌入式硬件上需要的文件,一共5个:uboot,linux系统,dtb(设备树),rootfs,module。下面一个一个的介绍:
(1)uboot,这个东西就是个引导的东西,看代码啥的都不用管,咱们也不编写这玩意,也不是专门做这个东西的。这个东西的代码别人会做好,不做好自己没办法,很难改。咱们做单片机和嵌入式开发的主要是搞个串口啥的,没必要懂这个东西。这个东西的作用就是引导嵌入式里面最底层的代码去哪个地方找你的这4个文件,告诉嵌入式各个东西的地址等等。当然里面还有很多其他的东西,咱们不用看。正点原子和飞凌的介绍的都很详细,网上也有很多专门介绍这个的。咱们是用的,所以知道这个东西是告诉嵌入式,去哪个地方找这几个文件就行了。
(2)linux系统,这个东西有个名字叫zlmage,当然不同时期这个东西叫法不一样,各个开发板可能也不一样,也可能叫uimage。小伙伴知道这个东西是linux系统就行。Uboot告诉嵌入式,linux系统在这个位置放着,然后你去找然后解压然后编译然后运行系统。这些运行的东西嵌入式会自己弄好,里面都是做好的。这个类似于单片机里面的main函数之前的东西,告诉主程序在哪里,然后自己去执行,至于怎么执行咱们不用管,只要知道放进去之后,uboot会自己找,然后让他自己运行。再类比过来,这个就相当于咱们装linux系统,我们就是uboot。咱们操作装系统,装完之后就是一台电脑,linux的电脑。只不过这个电脑界面也没有,显示也没有,啥都没有。并且咱们是看不到这个程序的,仅仅是底层的linux程序。
(3)rootfs文件,这个玩意是个压缩包,uboot启动linux之后,linux会自己解压缩这个压缩包,然后安装。至于怎么运行的不用管,只知道他会干这个活就行了。然后这个东西就是各个文件夹。类比过来就是你linux电脑装好了,你自己新建个文件夹,把你的东西都放进去,然后并且按照是按照规则新建和放的。这个是我们能在外部看到的,用什么看呢?上篇文章说的各个服务器什么的,只要在win下安装就能看到这些文件,至于安装或者ping的等技术细节我就不说了,网上很多。并且将来很多你自己编写的c什么的都放在这个里面。这个就是个放东西的地方,并且在嵌入式linux系统的上层。
(4)dtb设备树,这个东西告诉linux,我需要哪些硬件,硬件的初始化怎么样。比如我现在做的系统需要1个串口,那dtb就会告诉linux我这边配置了1个串口。明天做了一个系统需要2个串口和1个can,那dtb就会告诉linux我这边配置了2个串口和1个can。同时在rootfs文件系统里也会让你看到这些文件,你可以在dev文件夹里找到。前面你会看到1个串口文件,后面你会看到2个串口文件和1个can文件(不太合适,可以这样理解)。
话说回来为啥需要这个东西,网上有很多了,说直白点就是开发板太多了,用法也太多了,那就都给你模板,你要哪个自己配哪个,我一层一层的给你写好,你需要就改你的开发板对应的dtb。这样就可以选择性去添加,减小代码量和占用内存量。
(5)modules文件,这个东西相当于一个动态函数库dll。里面各种c文件,你用就调进去,不用就放那里,减小代码量和提高linux运行的效率。当然这部分也可以直接放到rootfs里面,都行,看你自己怎么用。开始做这个的时候,你放到rootfs里面,每次都得烧写,真是慢的,得至少5分钟吧,你直接放到module,随时改随时放进去,方便又快捷。等你写的差不多了,什么都确定了就可以直接放到系统里了。
第三章 文件编译
上面介绍了嵌入式的系统跑起来需要哪些文件,现在介绍这些文件怎么来的。
(1)uboot,这个不用编译,别人直接给;
(2)zimage,固定的文件夹下,直接make zimage就出来了;
(3)dtb,固定的文件夹下,直接make dtbs就出来了;
(4)rootfs,这个不用弄,别人一般会给,当然有制作这个东西的软件,但是就是几个文件夹,为啥自己弄的,直接用别人的不香么?压缩下就行了,压缩之前把你自己的文件夹放到里面就可以了;
(5)module,固定文件夹下,直接make modules就出来了
先说说为啥那么简单,因为别人都给你做好了,你直接make,他们就会自己执行了。当然这个东西得按照别人给的说明书去操作,前面还有很多东西,比如gcc的环境变量设定等等,需要把环境配置好才能进行这几步,要不然哭都不知道怎么哭的。
第四章 文件烧写
其实烧写的方式有很多种,现在只说我现在用的一个方式:sd卡。
根据他们给的教程,制作出来一个sd卡,这个必须按照教程,因为你不知道这些代码放在sd卡的哪个位置,因为放的位置是卡的绝对位置,也就是得下载到固定的0x0000xxxx的位置。如果你自己拷进去,那可不一定放在哪个位置了,哪个位置有空放在哪了,并且不一定把你的文件放成一个整块块,可能给你分开放了。
Sd卡制作好后,里面有文件,然后把你上步生成的5个东西直接替换掉sd卡里面的文件就好了。这些步骤都是固定好的,你按照说明说就好。
然后就把sd卡插上,根据什么拨码开关,从哪个地方启动,现在我是从sd卡启动,直接拨码就行了。然后开电源,嵌入式硬件会自动把你sd卡的东西拷进去,拷完就ok了,把拨码开关拨回去,sd卡拿出来,整个流程就结束了。
第五章 外围知识
怎么看程序运行,有个串口留出来了,可以直接打印出来,给的说明书上都会告诉你怎么弄,并且win上的软件也会给你,按照步骤一步一步来就行。
网口上挂:嵌入式的开发板网口是不能直接用的,需要自己用指令挂上去,直接win上的软件输入指令,就可以了ifconfig eth0 up,这样网口0就能用了,然后设置ip地址等等,can什么的也是这个套路。其实这个时候才会用到linux编程的知识,得知道linux的指令。不过这些指令说明书里面会直接给你,教你是什么命令。
启动:网上都是说了一大堆,什么怎么代码怎么流程。就是个开关。0就是sd卡启动,1就是u盘启动,2就是固态硬盘启动。其他不用知道,记住怎么拨码就行了,电路不用管,代码也不用管,徒增烦恼。当然你自己设计开发板的话,需要知道硬件怎么连接就行了,这个和单片机的制作电路一样,没啥区别。
第六章 写在最后
这部分介绍了嵌入式里面需要的文件,和单片机一个out文件或者hex文件不一样,不过也挺简单,就是根据说明书介绍,一个一个编译一个一个往里面放就行。至于为啥那样放?那hex文件你知道为啥那样放么?不知道。你知道out文件是怎么放进去的么?不知道。就知道放进去能用就行。只是hex文件放进去你是直接点的按钮,方便简单还能看到进度条。而嵌入式的呢,需要你自己编译,自己放,然后自己拷进去,能用不就是开发的最终目的么。有需要的小伙伴可以关注公众号,里面会有源代码之类的,或者需要的文档之类的。关注下然后私信,会给链接下载。