目录

OpenWRT固件封装方法

在嵌入式式开发领域,定制固件镜像或固件映像定制是一种常见的做法。这种做法允许开发者根据特定的需求和应用场景,定制并封装自己的固件。本文将以OpenWRT系统为例,详细介绍固件封装的方法。

1. 自定义文件

首先,我们需要了解如何在OpenWRT系统中包含自定义的配置文件。根据OpenWRT的官方文档,自定义的配置文件应该放在<buildroot>/files/目录下。例如,如果你想要在固件镜像中包含自定义的/etc/config/firewall/etc/sysctl.conf,你应该创建以下文件:

<buildroot>/files/etc/config/firewall
<buildroot>/files/etc/sysctl.conf

如果你的<buildroot>~/source,并且你希望将一些文件复制到固件镜像的/etc/config目录下,那么你应该将这些文件放在~/source/files/etc/config目录下。

OpenWRT强烈建议使用uci-defaults来逐步集成只需要的定制内容。这有助于最小化与自动生成设置之间的冲突,这些设置可能会在版本之间发生变化。

2. 系统定制内容

接下来,我们来看一个具体的例子。在这个例子中,系统的定制内容主要是对系统的配置文件/etc/config/system进行修改。修改后的内容如下:

config system
    option hostname Jotale
    option timezone UTC

config timeserver ntp
    list server 0.openwrt.pool.ntp.org
    list server 1.openwrt.pool.ntp.org
    list server 2.openwrt.pool.ntp.org
    list server 3.openwrt.pool.ntp.org
    option enabled 1
    option enable_server 0

config led
    option default '0'
    option name 'system'
    option sysfs 'mediatek:green:system'
    option trigger 'timer'
    option delayon '1000'
    option delayoff '1000'

config led
    option default '0'
    option name 'wifi'
    option sysfs 'mediatek:green:wifi'
    option trigger 'netdev'
    option dev 'ra0'
    option mode 'link tx rx'

config button             
        option button   BTN_1
        option action   released
        option handler  reboot
    option min  0
    option max  2

config button
    option button   BTN_1
    option action   released
    option handler  'jffs2reset -y && reboot'
    option min  6
    option max  30

config button
    option button   BTN_2
    option action   pressed
    option handler  'kill -SIGUSR2 $(pgrep my_program)'

在这个配置文件中,添加了BTN_2 button的配置,使得通过按键可以发送信号给my_programmy_program是一个自定义的程序,用来控制系统的一些功能。在刷写固件后,这个配置文件就替换了系统中的/etc/config/system文件。

此外,还可以加入自定义的程序。例如,my_program的编译后的可直接运行的程序以及程序的配置文件等。将这些文件放在<buildroot>/files/opt/cky/目录下,这样在编译固件的时候,这些文件就会被编译进固件中。在刷写固件后,这些文件就会被放在/opt/cky/目录下,可以直接运行my_program程序。

3. 集成软件包

除了配置文件和自定义程序,还可以集成一些软件包。例如,运行C++程序需要的libstdcpp_4.8-linaro-1_ramips_24kec.ipk以及kmod-gpio_control_driver_3.18.29-1_ramips_24kec.ipk软件包,这些包是可以通过make menuconfig直接编译进固件中的。这样在刷写固件后,这些包就会被安装到系统中。

通过以上的步骤,OpenWRT系统的配置文件、软件包以及自定义的程序就都可以集中在一个固件中了。这样,我们就可以得到一个完全定制的OpenWRT固件,满足特定的需求和应用场景。