嵌入式linux系统开发教程

码农先锋 2021-01-21 08:13:51
linux Qt Ubuntu GCC busybox


在学习嵌入式开发的过程中,尤其是开始入门时,包括各种各样的教程,都是在讲学习linux,很少讲如何利用linux来开发属于自己的嵌入式项目,也就是没有一个全局的概念,简单理解,大概流程如下:

一、建立开发环境

操作系统当然是LInux,或者在win系统下安装虚拟机,通过网络下载相应的GCC交叉编译器进行安装,或者安装产品厂家提供的交叉编译器。

这一步,就相当于在win系统下,要安装一个IDE开发环境,如MDK,IAR等。

二、配置开发主机

主要是配置minicom,也就是串口助手,minicom软件是作为调试嵌入式开发板信息输出的监视器和键盘输入工具,是一个非常方便的工具,我们开发其他嵌入式程序时,其实很多时候也采用串口调试,所以最终原理都是相通的。

配置网络,主要是配置NFS网络文件系统,这个主要是用于下载程序,当然不配置也可以,有很多别的办法。

三、建立引导装在程序的bootloader

常用的bootloader主要有u-boot、vivi等,貌似主流的就是u-boot,这个根据自己具体的芯片进行移植修改。有些芯片是没有内置引导加载程序的,这就需要编写开发板上的Flash的少些程序,当然也可以用windows下的通过JTAG并口和仿真器少些Flash芯片程序,也有linux下的公开源代码的J-Flash程序,所以在设计自己的硬件时,可以预留多种方式。

简单的讲,其实就是要做好一个属于自己板子的u-boot,完成初始化,内核引导,下载、烧写等。

四、移植嵌入式Linux操作系统

如果有专门针对你使用的CPU的Linux再好不过,比如uCLinux、ARM-Linux、PPC-Linux等,如果没有,就要尝试移植专属自己的linux了,然后再添加自己特定硬件的驱动程序,进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,而对于uCLinux这样的系统则需要编译进内核,与内核为一体,再进行调试。

五、建立根文件系统

前面的文章讲述过,没有根文件系统的Linux是无法正常工作的,还需要根文件系统。所以需要下载使用busybox软件来实现制作根文件系统。

再根据自己的应用需要来添加其他程序,默认的启动脚本一般都不会符合应用的需求(因为所有的嵌入式开发都是自由定制的),所以就要修改根文件系统中的启动脚本,它的存放位置至于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂载文件系统的配置文件/etc/fstab,其实就是定制自己要开机启动的程序,具体情况会随着系统的不同而不同,根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生少些映像文件。

六、建立应用程序的Flash磁盘分区

一般会使用jffs2或者YAFF文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用NOR FLASH,有的系统使用NAND FLASH,也有的系统两种flash都使用,那么jffs2的作用是什么呢?

百科里的介绍是:jffs2全名为journalling flash filesystem version2(闪存日志型文件系统第二版),其功能就是管理MTD设备上实现的日志型文件系统,日志系统也是一个完整系统所必须的,不管是windows还是linux,有了这些才不算耍流氓,嘿嘿。jffs2并不准备提供提供类似与传统文件系统的功能,它只会直接在MTD设备上实现日志结构的文件系统,除了提供具有断电可靠性的日志结构文件系统,jffs2还会在它管理的MTD设备上实现"损耗平衡"和“数据压缩”等特性。

MTD(memory technology device内存技术设备),就是各种flash。

七、开发应用程序

应用程序可以放到根文件系统中,也可以放到yaffs、jffs2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,就是类似于uCOS-II的方式。

其实,写到这,这一步才是最终的目的,前面的步骤都是为了这一步,我自己的理解,开发应用程序呈现的方式应该是有三种的:

(1)直接讲应用程序和内核设计在一起,类似与uCOS-II的方式,这种方式就是属于私人订制了,实现的功能种类是比较少的,只是专属,但是稳定性要求高的,比如说复杂交换机、防火墙等,可能更看中linux系统的稳定性和各种优秀的外围资源吧。

(2)基于qt等GUI开发应用程序,之前一直以为qt是linux绕不开的,其实随着了解,不尽然,qt其实就是一个桌面系统,比如说ubuntu,对于高手来说,有没有桌面都是无所谓的,因为所有都是可以通过shell来完成的,使用qt是方便用户使用,所以对于那些需要操作,有屏幕的嵌入式设备,这个是一个很好的方案。比如目前工控触摸屏还有各种手持式带有屏幕的仪表器械,都是这种方式。

(3)没有屏幕,只有简单的人机接口,比如串口,按键,数码管,这种也能实现复杂功能开发,比如说,完全可以开发一个基于linux的PLC,可编程方案,通过脚本实现,这也是一种很好的方案实现。

八、烧写内核、根文件系统、应用程序

无论怎么加载,模块也好,所有的这些开发,过程资料,都是要烧写到flash中的,然后应用程序需要什么,就加载对应的功能程序即可。

九、发布产品

写到最后,发现,之前还是过于迷信linux,不是说linux不好,而是说,对于嵌入式开发工程师来说,没有最好的,只有最适合的,开发一款产品,用什么,不用什么,都是因地制宜的。

比如说一个简单的跑马灯,你非要使用嵌入式linux方案,那就是烧包,只需要一个简单的2051,裸机程序就能开发,既便宜,又好用。

开发一款小型控制器设备,如果功能不太复杂,可以使用稍微高级的CPU,裸机或者ucos等来开发,也很方便,也能做很多定制版的工业小型控制器。

开发一款中高型的控制器设备,功能比较复杂,甚至需要复杂的屏幕交互,比如手机(安卓是linux的亲儿子,OS是linux的亲表弟),取款机,服务器交易系统,那么linux就非常合适了。

![](https://oscimg.oschina.net/oscnet/up-33e0b7d30703178bca85c4d6a212787a914.png)

以上就是良许教程网为各位朋友分享的Linux相关知识。

版权声明
本文为[码农先锋]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4937611/blog/4916980

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云