前言:

目前手上有一款产品需要做部分维护工作,它是基于OpenWrt开发的,也就是Linux,只不过原来的维护工作主要是C逻辑层,本次任务需要重新开辟一个package来独立执行整个任务逻辑,避免嵌套在其他进程中,故以下是自己的学习及预研记录。


(1)、理论基础

Linux启动过程:
        ①内核引导。
                当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。


        ②运行init。
                内核文件加载以后,就开始运行第一个程序 /sbin/init,它的作用是初始化系统环境。init 程序首先是需要读取配置文件 /etc/inittab。由于init是第一个运行的程序,它的进程编号(pid)就是1。其他所有进程都从它衍生,都是它的子进程。


        ③系统初始化。
                在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。  它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。


        像我现在这个项目中的启动文件是这样一句话,他是执行了rcS的脚本文件来进行初始化操作的。

 

④建立终端
                rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。


        ⑤用户登录系统
                开机启动程序加载完毕以后,就要让用户登录了。


                一般有三种登录方式:
                        1)、命令行登录
                        2)、ssh登录
                        3)、图形界面登录

 

OpenWrt的启动流程主要:
        1.Bootloader->
        2.linux->
        3./etc/preinit->
        4./sbin/init->
        5./etc/inittab ->
        6./etc/init.d/rcS->
        7./etc/rc.d/S*

基于OpenWrt的应用程序的开发:
(增加package、修改Makefile、编译、运行)


增加package的开发步骤:
        ①进入 openwrt/package/目录下
        ②创建三个文件


1)src:存放源代码,并且包含指定交叉编译环境的Makefile
2)Makefile:这个文件是用来让openwrt查找、添加、编译这个目        录的
3)File:(可选)通常存放配置文件


(2)、实际应用


基本步骤:
①、在package目录下创建一个目录
②、在刚才的目录文件夹下建立src文件夹,用来存放源码
③、在src中添加源文件
④、在src目录下添加Makefile文件


(3)、主要问题


问题1:
在添加完package文件后,发现单个文件编译报错,错误如下:
首先根据错误提示“recipe for target xxx”和“没有匹配的文件路径”。

解决办法:
回看自己的添加的文件夹,发现,文件夹的名字和里面的.c文件名字不同,但是Makefile中写的路径却写成了.c文件的名字,更改相同的名字重新编译显示如下:(没有错误)

 

随后对整个工程文件进行编译,并烧录到LG220中进行启动测试。结果并没有显示线程启动,查看编译提示,发现有一个单独的提示信息:
WARNING: skipping learn_text — package not selected 这里我们需要    运行make menuconfig 在我们自己在Makefile中设置的目录下,找到


这里的路径名是指示自己的package在配置界面的那个目录下的,通过这里的路径提示,在menuconfig中开启自己添加的包,如下图所示:


随后再重新进行编译,依然还有错误,错误提示如下图所示:


检测src目录下的Makefile发现,刚才因为测试.c文件的正确性生成了两个GCC的.o文件,尝试删除文件之后,编译正常通过。但是烧录到设备中后出现了系统不能正常启动的问题。


重新核对编译文件,当看到启动顺序的设置时,发现设置冲突,由原来的118更改为116之后便可正常运行。运行结果如下图所示:


 

至此,本次Makefile文件及package包的添加更改学习过程结束。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。