開發(fā)環(huán)境:
主機:Ubuntu12.04
開發(fā)板:RT5350
Openwrt:Openwrt15.05
1 配置編譯驅(qū)動程序
首先將 RT5350_drv 文件夾傳到 OpenWrt 源碼的chaos_calmer/package/kernel 目錄下。然后進入 OpenWrt 源碼的頂層目錄,執(zhí)行 make menuconfig。
注意:至于RT5350_drv的內(nèi)容,建議初學者按照步驟做就是了,不必追問細節(jié),初學者應該知道openwrt驅(qū)動開發(fā)流程,代碼的具體實現(xiàn)筆者在后文也會講到,跟著筆者一步一步做就是了。
$ cd openwrt/
$ make menuconfig
在彈出的菜單界面里,配置選項。
Kernel modules --- >
Other modules --- >
< * > kmod-RT5350_drv
然后我們就能看到我們的驅(qū)動程序的選項了 kmod-RT5350_drv,將它配置成M,也可編譯進入內(nèi)核。
圖1
最后,退出保存。然后再執(zhí)行編譯命令。
make V=99
編譯完成以后,就能在源碼/bin/ramips/packages/base目錄下看到我們的內(nèi)核模塊驅(qū)動程序的軟件包。
kmod-RT5350_drv_3.18.109-1_ramips_24kec.ipk
2 字符設備驅(qū)動軟件包 Makefile 介紹
首先進入到RT5350_drv 文件夾,里面有兩個文件。Makefile內(nèi)容如下。
#
# Copyright (C) 2008-2019 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=RT5350_drv
PKG_RELEASE:=1
include $(INCLUDE_DIR)/package.mk
define KernelPackage/RT5350_drv
SUBMENU:=Other modules
# DEPENDS:=@!LINUX_3_3
TITLE:=Motor driver
FILES:=$(PKG_BUILD_DIR)/RT5350_drv.ko
# AUTOLOAD:=$(call AutoLoad,30,RT5350_drv,1)
KCONFIG:=
endef
define KernelPackage/RT5350_drv/description
This is a RT5350_drv drivers
endef
MAKE_OPTS:= \\
ARCH="$(LINUX_KARCH)" \\
CROSS_COMPILE="$(TARGET_CROSS)" \\
SUBDIRS="$(PKG_BUILD_DIR)"
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
$(MAKE) -C "$(LINUX_DIR)" \\
$(MAKE_OPTS) \\
modules
endef
$(eval $(call KernelPackage,RT5350_drv))
至于該 Makefile 文件中每行是什么意思,請查閱上一章,這里不再贅述。進入到 src 文件夾中;我們看一下 Makefile 的內(nèi)容,非常簡單:
obj-m +=RT5350_drv.o
告訴內(nèi)核添加的模塊目標文件名稱為RT5350_drv.o,至于RT5350_drv.c 這一個驅(qū)動模板,在上一章介紹過了,這里就不加以闡述了。
3 動態(tài)的加載和卸載內(nèi)核驅(qū)動模塊軟件包
通過前面的努力,我們終于得到了我們自己的內(nèi)核驅(qū)動模塊軟件包了。接下來就來使用它。首先將 kmod-RT5350_drv_3.18.109-1_ramips_24kec.ipk軟件包傳到開發(fā)板上面。
然后使用 opkg install 命令來安裝軟件包。
opkg install kmod-RT5350_drv_3.18.109-1_ramips_24kec.ipk
使用 opkg list 命令來查看已經(jīng)安裝了哪些軟件包。這里是否執(zhí)行該命令都無所謂。接下來進入我們的/lib/modules/3.18.109 目錄,就能看到我們的驅(qū)動程序模塊了。
cd lib/modules/3.18.109/
接下來就通過 insmod 命令來裝載驅(qū)動模塊。
insmod RT5350_drv.ko
當我們一執(zhí)行該命令,串口終端上面就會打印出。
這行打印信息,正是我們在驅(qū)動程序的入口函數(shù)中添加的調(diào)試信息。如果我們想卸載驅(qū)動模塊,則使用 rmmod 命令。
rmmod RT5350_drv
當執(zhí)行完這條命令后,就成功的卸載了該驅(qū)動程序。我們也能看到如下打印。
這條打印,是在我們的驅(qū)動的出口函數(shù)中添加的調(diào)試信息
4 驅(qū)動開機自動加載
雖然我們通過 opkg insall 得到了.ko 為后綴的驅(qū)動模塊,但是每次要使用都得進行insmod,比較麻煩,我們可以讓系統(tǒng)開機后自動的加載該驅(qū)動模塊。
首先進入到特定的目錄:
$cd /etc/modules.d
然后創(chuàng)建一個文件并且寫入一些信息:
vi 61-RT5350_drv
說明:61 表示不使用外接 usb 類的自啟動程序,分隔符‘ -’后面接驅(qū)動模塊名稱!在創(chuàng)建的該文件中寫入RT5350_drv 即驅(qū)動的名稱。最后,必須保證RT5350_drv.ko 文件即我們的驅(qū)動模塊文件放在: /lib/modules/3.18.109/
好的,重新啟動系統(tǒng)即可:reboot
可以通過命令查詢當前已經(jīng)加載的驅(qū)動模塊:lsmod
審核編輯:湯梓紅
-
驅(qū)動程序
+關注
關注
19文章
836瀏覽量
48038 -
開發(fā)板
+關注
關注
25文章
5050瀏覽量
97456 -
Ubuntu
+關注
關注
5文章
563瀏覽量
29756 -
驅(qū)動開發(fā)
+關注
關注
0文章
130瀏覽量
12077 -
OpenWrt
+關注
關注
10文章
130瀏覽量
39304
發(fā)布評論請先 登錄
相關推薦
評論