嵌入式Linux开发流程

   在学习嵌入式开发的过程中,尤其是开始入门时,包括各种各样的教程,都是在讲学习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就非常合适了。

  • 33
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 嵌入式Linux开发流程一般包括以下几个步骤: 1. 硬件选型:根据项目需求选择适合的硬件平台,包括处理器、存储器、外设等。 2. 系统移植:将Linux内核移植到目标硬件平台上,并进行适当的配置和编译。 3. 应用开发:根据项目需求,开发相应的应用程序,包括驱动程序、应用程序等。 4. 调试测试:对系统进行调试和测试,包括硬件和软件的调试、性能测试等。 5. 部署上线:将系统部署到目标硬件平台上,并进行相应的上线测试和维护。 以上是嵌入式Linux开发的基本流程,具体实施过程中还需要根据项目需求进行相应的调整和优化。 ### 回答2: 嵌入式Linux开发是一种基于Linux内核的嵌入式系统开发模式,使用嵌入式Linux可以充分利用Linux内核的稳定性、高效性和可扩展性。下面是嵌入式Linux开发的一般流程: 1. 硬件平台选型:选定适合项目需求的硬件平台。 2. 构建开发环境:安装必要的软件工具,例如交叉编译工具(Cross Compiling Toolchain)、构建工具(Make、CMake等)、调试器(GDB)和版本控制工具(Git等)等。 3. 内核选型和裁剪: 根据应用需求选择合适的内核版本,裁剪内核以达到精简内核和减少启动时间的目的。 4. 驱动开发开发适配硬件平台的驱动程序,包括I/O接口驱动、视频驱动、网络驱动等。 5. 根文件系统构建:进行交叉编译并构建根文件系统,根据应用需要安装和配置必要的软件。 6. 应用开发开发应用程序,根据需求选择合适的程序语言和框架,并进行编译。 7. 集成测试:将驱动、系统和应用程序进行整合测试,确保嵌入式系统的各项功能能够正常运行。 8. 部署发布:根据应用需要选择合适的部署方式和发布平台,并进行部署和发布。 以上就是嵌入式Linux开发的一般流程。不同的项目和应用会有不同的需求和流程,但总体流程大致相同。在开发过程中,需要注重软件与硬件的配合,遵守软件开发流程和规范,并不断进行测试和优化,才能保证开发嵌入式Linux系统能够稳定运行。 ### 回答3: 嵌入式Linux开发流程与一般的软件开发流程类似,但也有其自身的特点和重要步骤。下面我将从硬件选型、内核编译、根文件系统建立、应用程序开发和测试调试等方面,对嵌入式Linux开发流程进行详细介绍。 1. 硬件选型 在进行嵌入式Linux开发前,首先需要选择嵌入式开发板或单板计算机( SBC) 作为硬件平台。选型时需要考虑应用的需求、性能和功能要求、可用的外设接口、尺寸和成本等因素,同时也应该优先考虑具有开发支持和社区支持的硬件平台。 2. 内核编译 选择好硬件平台后,需要编译适合该平台的内核文件。内核包含了Linux操作系统的核心部分,负责管理硬件、文件系统、网络、驱动等等。编译内核需要先安装交叉编译工具链,然后设置内核配置,编译内核并将内核文件加载到开发板中。 3. 根文件系统建立 根文件系统包含了应用程序和系统所需的完整文件系统,以及任何必要的库和驱动程序。建立根文件系统需要选择合适的文件系统格式(如ext2、ext3、ext4等),然后从Linux发行版中获取所需的文件和库,打包成根文件系统文件。根文件系统的安装和配置需要通过使用bootloader进行。 4. 应用程序开发 在进行应用程序开发前,需要了解硬件接口和操作系统API的具体实现。使用C、C++等编程语言编写程序,并可使用交叉编译工具链进行编译。可以通过使用shell脚本将应用程序整合进根文件系统中,或使用网络烧录工具将程序直接下载到开发板中。 5. 测试和调试 在应用程序开发完成后,需要进行测试和调试。其中,单元测试和集成测试是重要的测试方式,在这些测试过程中需要确保应用程序与硬件和操作系统进行正确交互。同时,通过使用调试工具进行调试可以有效地解决问题。 总之,嵌入式Linux开发流程需要系统性地进行,包括硬件选型、内核编译、根文件系统建立、应用程序开发和测试调试等关键步骤。需注意的是,良好的开发流程和工作流程嵌入式Linux开发成功的重要基础。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值