姓名:王央京 学号:18050100052 学院:电子工程学院
转自:https://www.zhihu.com/question/395435388/answer/1279941719
【嵌牛导读】本文介绍了嵌入式Linux开发的知识
【嵌牛鼻子】嵌入式Linux开发
【嵌牛提问】在了解Linux系统概念后,该如何学习Linux开发?
【嵌牛正文】
嵌入式Linux的入门项目开发,主要包含以下的知识点:
1.数据输入/输出的接口 -- 嵌入式Linux驱动开发
2.数据运行的平台和支持环境 -- uboot开发,Linux内核裁剪,文件系统移植
3.数据处理和转换 -- 嵌入式应用层开发
对其中的每一大项进行细分,嵌入式Linux驱动开发:
1.对于外部设备的硬件实际操作和调试(这部分和单片机时相通的),包含SPI,I2C,ETH,HDMI, CMOS等
2.Linux实现驱动模块的API接口(包含基础的Module_xxx的函数,还有添加类,设备的接口函数以及引申的虚拟总线接口)
3.为解决驱动代码冗余的设备树相关知识和解析设备树的代码实现
uboot开发,Linux内核裁剪,文件系统移植:
1.uboot主要涉及嵌入式裸机的应用开发,非原厂人员基本不会修改,所以基本不会在uboot中实现复杂应用。
2.Linux内核裁剪,主要围绕Menuconfig内的配置删减功能,以及将驱动模块添加到内核的实现。
3.文件系统移植,主流的是移植支持QT或者安卓的环境到平台中,当然无界面的应用使用最小系统也能满足需求, 已经在此基础上移植支持的基础lib,启动文件,指令文件和目录等。
嵌入式应用层开发:
1.使用open,write,read,ioctl等对底层硬件信息的操作(包含接收,发送)
2.基于系统接口的对于命令行信息,进程和线程,socket通讯接口(TCP/UDP), 同步机制(互斥锁,自旋锁,管道,消息队列等), 文件I/O等基础Linux API处理
3.基于上述接口实现的上层应用实现,如基于TCP的网络应用HTTP或MQTT,视频应用RTMP,以及为了功能需求而引入的线程或进程机制,而为了满足复杂应用的需求,线程或进程间同步机制也被使用,此外可能会引入Sqlite用于数据的管理,引入openssl用于数据的加密,这些都是应用层开发常用的技术手段,嵌入式Linux比单片机的最大优点就是有很多拿来即用的方案,十分方便应用层的功能开发。
4.为了满足工业界面化需求引入的界面实现方案,目前嵌入式的主流就两大类QT/C++和Android/Java(为了满足Jave对底层的操作,引入了JNI的实现)。
除了上述具体内容之外,还有一些重点需要强调:
1. 嵌入式Linux驱动中驱动层相关的API接口,DTS语法这些都是从业者必须掌握的技术,必须去理解掌握。
2. uboot开发,Linux内核裁剪,文件系统移植部分在项目中大多是按照官方方案在走流程,这部分的源码很多是精华,不适合入门者去研究,能够编译构建个满足需求的环境就够了。
3. 嵌入式应用层开发,往往是需要掌握的核心 。应用层目前已经开始向桌面或移动端的应用靠拢,除了对底层硬件的直接操作外,其运用的语言包含C(Linux API), C++, Python, nodejs, Java以应对图形界面,网络web,算法等的多方面需求。