嵌入式Linux开发流程:
1、搭建前期开发环境,如搭建Linux宿主环境、安装交叉编译器、以及一些常用的开发辅助软件如source insight等;
2、学会直接操作硬件。这个跟单片机的操作类似,需要我们查看原理图,数据手册,操作相应的寄存器来实现功能。
这里只需要学习简单的IO、中断、定时器、串口即可,后面的内存、IIC、LCD、AD、DA等可以有个大概的了解,需要用到的时候再重点学习。
3、学会如何移植UBOOT,不需要自己写,我们需要了解uboot的结构,并往里面添加、剪裁相应的函数。我们需要明白uboot其实就是一个用于硬件初始化的裸机程序,开发板上电后,进行内存初始化,把uboot放入内存中执行,执行完成后把传递给内核的一些参数放入boot parametors中,再从设置的地址中取出内核部分并加载到内存中,最后把程序执行权限交给内核。
4、学会如何配置和移植内核。在这之前,首先要熟悉makefile的基本规则,使用meuconfig进行图形化内核配置,然后执行顶层makefile生成内核。生成的内核需要设置很多参数,其中最重要的是对文件系统的支持。执行完内核程序后,init进程可以创建其他进程,实现多进程工作。
5、学习通过busybox创建文件系统,移植文件系统的支持库,完成后建立设备节点,最后生成镜像文件并刻录到固定位置。
6. 学会开发驱动。这里我水平不够,只是对知识点有了简单的了解。添加内核驱动,基本上就是添加一个关键结构体的内容。跟STM32的库函数封装类似,但是很复杂。
7、应用程序根据驱动封装的上层接口进行相应的硬件控制。
8、通过学习QT等界面进行嵌入式系统界面的开发,为产品提供更好的用户体验。
Linux应用层知识:
1、熟悉Linux的基本命令,掌握shell脚本操作的一系列基本Linux命令的语法。
2.熟悉C语言
3.熟悉vi编译器的基本操作
4.使用GCC编译器进行编译。
5.使用GDB调试程序(我不知道如何......)
6.Linux下基本C操作:字符串操作、内存分配、时间获取等。
7.文件系统操作:打开、关闭文件、创建、查找、获取状态。
8、文件指针的非格式化输入输出(fgetc()、fputc())和格式化输入输出(sprintf、fscanf)操作。
9.工艺操作:
进程概念:载入内存并在操作系统中运行的应用程序,由程序、数据、进程控制块(PID等)组成。
进程状态:运行态、就绪态、阻塞态(进程请求IO或者等待事件触发)
进程创建:一般我们执行的程序就是一个进程,可以用fork()来创建该进程的子进程,子进程会复制父进程的数据。pid_fork(void);
进程终止:return、exit()等。
守护进程:为了维持系统的运行,会创建一些进程。父进程是init的子进程,在后台运行。如果将普通进程修改为守护进程,需要根据守护进程的特点进行修改。
10.进程间通信:
进程间通信的目的是为了在不同进程间交换进程数据和信息,以完成某项特定的功能。主要的方法有:管道、信号、消息队列、信号量和共享内存。下面介绍几种常用的。
消息队列:将数据放入消息队列,另外一个进程通过相应的接口函数调用,获取键值对应的消息队列。
信号量:本身不交换数据,主要控制多个进程对共享资源的访问。
共享内存:多个进程将同一块内存区域映射到自己的进程空间来完成通信。是进程间通信最快的方式。
11.多线程编程:
概念:据说在嵌入式领域应用广泛是因为资源问题,其实现在嵌入式领域和传统计算机领域的界限已经很模糊了,很多时候硬件资源没那么多,需要节省,这里先略过,以后再深入研究。
12.网络编程:
TCP/IP协议栈:网络接口层(数据帧)、网络层(IP协议)、传输层(TCP/IP协议)、应用层(FTP等)。
Socket基础:Socket是封装传输层协议的操作单元,使得网络编程更加简单。
服务器模型:循环服务器模型(while结构,每次只能处理一个客户端请求)、并发服务器(fork实现,创建子进程实现)
域名系统:DNS,把难以记忆的IP地址和端口直接转换成人性化的域名。
13.GUI设计
没用过C开发,用pyQT5还是挺方便的,做完界面直接生成源码,python开发也很容易上手,强烈推荐。
扫描下方二维码,一个老毕登免费为你解答更多软件开发疑问!
