OpenWrt下静态编译驱动到内核中的方法

时间:2024-03-15 17:11:09

申明:

小弟openwrt初学,很多东西都不知道,在偶然的机会用到openwrt,想要将自己写的驱动程序编译进内核中,费了九牛二虎之力,最终还是直接在内核源码中进行增加才搞定,过程尽可能的详细,也是自己的一个学习过程,也是给自己做一个笔记后面遇到可以借鉴。

另外,第一次写博客,希望大家不喜勿喷哦,当然文档中有任何问题都欢迎能指出来,而且在过程中遇到了一个问题到现在没有找出为什么,希望大家看到了可以帮忙分析是为什么。先谢谢大家了!^_^

下面进入正题。

1.进入到openwrt顶层目录:

OpenWrt下静态编译驱动到内核中的方法

2.进入到下面这个路径

/home/openwrt/7620/openwrt/barrier_breaker/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620a/linux-3.10.49/drivers,并新建文件夹myleds。

cd build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620a/linux-3.10.49/drivers

mkdir myleds

OpenWrt下静态编译驱动到内核中的方法

3.进入到myleds并新建文件Kconfig,Makefile。

cd myleds

touch Kconfig Makefile

4.打开Kconfig文件,并在文件中添加如下内容:

OpenWrt下静态编译驱动到内核中的方法

Vi Kconfig,然后输入下面的内容:

config MYLEDS

    tristate "myleds driver"

    default n

    help

    This is a Songshuai's  myleds drivice, for debugging kernel model

:wq

保存退出。

5.打开Makefile并在里面添加:

OpenWrt下静态编译驱动到内核中的方法

vi Makefile,然后在里面添加内容:

obj-$(CONFIG_MYLEDS)    += myleds.o

:wq 保存退出。

6.将写好的驱动源程序拷贝到这个路径下。

cp 这是源程序的路径/myleds.c .

7.返回到上级目录,并打开Makefile修改。

OpenWrt下静态编译驱动到内核中的方法

cd ..

vi Makefile

obj-$(CONFIG_MYLEDS) += myleds/

:wq

保存退出。

8.打开Kconfig并在最后面endmenu前面添加:

OpenWrt下静态编译驱动到内核中的方法

vi Kconfig

source "drivers/myleds/Kconfig"

然后返回到页面最上面,可以看到驱动的目录所在的位置:

OpenWrt下静态编译驱动到内核中的方法

:wq

返回到目录:

/home/openwrt/7620/openwrt/barrier_breaker/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620a/linux-3.10.49。

9.然后make menuconfig

出现界面,选择Device Drivers,然后回车进入。

OpenWrt下静态编译驱动到内核中的方法

翻到最后面,选择myleds,键入”y”或者按空格选择为<*>。然后选择“save”之后退出保存即可。

OpenWrt下静态编译驱动到内核中的方法

10.然后直接在根目录下make V=s,进行编译

OpenWrt下静态编译驱动到内核中的方法

之后出现了:

OpenWrt下静态编译驱动到内核中的方法

输入 y ,回车继续。

大概一分钟左右(大概时间),

OpenWrt下静态编译驱动到内核中的方法

回车继续。

直至完成。这个驱动从此就编译进你的内核文件中。

问题:

在第一次进行编译的时候,并没有在make menuconfig中配置myleds为选中的状态,所以在进行make V=s进行编译的过程中出现了两次输入“y”的过程,当时以为是没有配置导致的,所以也就没有多想了,但是编译出来的内核中包含了设备节点myleds。也就是说明已经成功便已进入到内核中了,但是在后来按照上面的过程make menuconfig之后,在进行编译,还是出现了输入两次为“y”的过程,不过结果还是和以前一样,不知道是因为什么哪?求教!