天天看点

我学嵌入式Linux(一)吐槽

1.第一次写文章,记录些无关的东西,因工作和学习的需要,买了友善之臂的Nanopi Neo小开发板,初衷是等着将来空闲有心情且想学的时候,学习下嵌入式Linux系统方面的知识,工作快7年,刚开始接触这块,很多优秀的工作机会都是跟系统相关,这块没啥经验只能望而却步。

2.选择这款开发板的原因,便宜,小巧玲珑,配上铝制的盒子,看着舒服,就当买块砖头也罢。

3.以前不是没有学习嵌入式linux开发板的想法,看到那些繁琐的工具链安装,还要在linux系统里面操作,真是麻烦,哪有单片机的开发环境简单,比如keil,连makefile都给省了,只需要关心芯片的核心内容,时钟,终端,外设配置,ram空间检查下,任务逻辑,用IDE一步步调试,没了。

反观嵌入式Linux系统开发,除了芯片硬件相关的外,还要懂makefile;ld linker脚本语法;在线调试还需要知道gdb的命令;改uboot要知道uboot下面的命令,跑Linux系统还需要熟悉Linux的环境,samba,NFS网络共享;添加设备,要修改设备树,还有设备树语法;还要添加设备驱动,有了驱动后根据应用还要开发应用逻辑功能的开发,还有roof文件系统的制作。。。这些学校里没有相关课程,工作后买了书,千篇一律,大都还是基于老版本的Linux内核,更多的是操作,看了就想睡觉。

4.机缘巧合,新工作需要在rk3399上添加个小驱动,只能硬上,一开始虚的不行,看资料的效率贼高,推荐一本,宋宝华的,基于Linux4.0内核的《Linux 设备驱动开发详解》,Linux里面那些关于信号量,字符驱动,块驱动的几乎别的嵌入式系统资料都有,这本也不例外,这本多了些设备驱动的软件架构思想,设备树dts,dtsi文件语法的介绍,针对的内核比较新,比什么5-6本宝典系类的要好多了,之前买了个宝典,具体多少本记不清了,翻了一遍,体会就是,把知识写薄的书才是好书。Uboot和Linux本身自带document文件夹,全部吃透肯定牛掰,书本讲那么多的例子,感觉是为了填充纸张。

5.友善之臂推出的开发板,一般都附带开发环境和所需要的工具链,使用者所需要的做的任务就是复制,copy,抄(与某国的技术发展之路保持高度一致)。原理步骤咋办,管他呢,先把友善的系统运行起来再说,后来发现抄的路也不是很顺利,这个Nanopi Neo的编译环境,除了安装工具链,源代码外,还搞了一套生成SD卡镜像文件的环境,用了bash等脚本自动跑,连python,swig等工具安装也包含在里面,至今不明白这里面到底在干嘛,也真不想了解(虽然想,但驱动这些核心我都没开始整,鸟你干嘛)。最终,依葫芦画瓢,可以到达手册的操作结果了(一般这时候阿Q精神会附体,so easy)。

6.如何改之,首先先有具体的需求和硬件实验验证的环境(我是因为工作),做法还是依葫芦画瓢,Linux是国外设计出和维护的(操作系统的疼),大部分驱动问题网上总能收到类似的,比如,如何在设备树中的I2C下添加设备,驱动咋添加,用printk打印,可以定位驱动内部大部分逻辑问题。系统内核的研究(很多面试官都会问这句,特别高大上,真正研究改它的,有自信改了,也不敢随便用吧)随缘吧(我也想一口吃成胖子)。目前就写了两个驱动,一个SPI驱动和外设通信;基于现有的Alsa架构,更改audio codec的驱动;App应用访问之可行。

写这两个驱动接触到了,

设备树及其语法

platform驱动思想(芯片的外设控制器皆为platform)

alsa声卡codec i2c驱动,SPI字符驱动

其他也没啥了

7.后续计划研究下uboot过程和具体实现,啥relocation,board_f,board_r, dtb,boot启动命令等,到底怎么就进系统了,里面怎么转?

8.为啥用linux,从使用者的角度来说,linux有很多现成的工具,比如samba,nfs服务,网络等等,更新一下就可以直接用了。测个芯片的SPI接口,用linux系统搭个测试平台就太那个啥了吧。。。

9.Linux虽然一直在更新,但整体的框架更新是很慢的,了解思想,保持活到老学到老的心态,管他呢。。

10.公司以赚钱活下去为第一任务,学习要围绕应用为首要目的,能不上系统就用单片机,能不自己写就外包,uboot里面readme好像有个开发者就说,有钱就请人搞,没钱有时间自己搞,没钱有时间但搞不定就换方案吧。当然这些好像不是说给我等屌丝听的,一种向往吧,祝你们都有一天把钱砸我脸上,我搞。

继续阅读