1. 程式人生 > >openwrt 驅動模組的編譯與載入

openwrt 驅動模組的編譯與載入

1、要編譯一個適用於openwrt系統的nids驅動, 原始碼由硬體商提供。
首先在ubuntun 下 make 編譯一下, 檢視是否編譯正常,是否出現錯誤, 修改錯誤。

OpenWrt環境下的編譯
1、 進入openwrt的編譯目錄,即是 make menuconfig 的配置。

在 ./package/kernel/ 下
mkdir gobinet
touch gobinet/Makefile
mkdir gobinet/src
將編譯所需的原始碼及相關標頭檔案copy 到 gobinet/src 下
cd gobinet/src
touch Makefile
編輯Makefile

obj-m := gobinet.o
gobinet-objs := GobiUSBNet.o QMIDevice.o QMI.o

其中 gobinet.o 為所需生成的 gobinet.ko 對應的名字
GobiUSBNet.o QMIDevice.o QMI.o 為生成gobinet 所需的原始檔

硬體廠商提供的Makefile 為

obj-m := GobiNet.o
GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o
EXTRA_CFLAGS := -DSIMCOM_NETWORK_MANAGER
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
OUTPUTDIR=/lib/modules/`uname -r`/kernel/drivers/net/usb/

all:
clean $(MAKE) -C $(KDIR) M=$(PWD) modules install: all mkdir -p $(OUTPUTDIR) cp -f GobiNet.ko $(OUTPUTDIR) depmod clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions Module.* modules.order

cd .. 進入package/kernel/gobinet, 編輯此目錄下的Makefile

include $(TOPDIR)/rules.mk          #必須包含
include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=gobinet #包名稱, 在menuconfig中顯示 PKG_RELEASE:=2 #版本號 include $(INCLUDE_DIR)/package.mk define KernelPackage/gobinet SUBMENU:=Other modules #子目錄 TITLE:= GobiNet device #包說明 DEPENDS:=+kmod-usb-core #編譯此ko檔案必須依賴的ko檔案,必須正確添 #加,不然不通過 FILES:=$(PKG_BUILD_DIR)/gobinet.ko #生成檔案 KCONFIG:= endef define KernelPackage/gobinet/description Kernel module for register a custom gobinet platform device. endef EXTRA_CFLAGS := -DSIMCOM_NETWORK_MANAGER #編譯所依賴的選項, 由原始 #Makefile 中得來, 必須有 MAKE_OPTS:= \ #固定格式 ARCH="$(LINUX_KARCH)" \ CROSS_COMPILE="$(TARGET_CROSS)" \ SUBDIRS="$(PKG_BUILD_DIR)" \ EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \ $(EXTRA_KCONFIG) 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,gobinet))

在編譯過程中若出錯 可以先檢查 EXTRA_CFLAGS 是否新增正確
出現
Package kmod-gobinet is missing dependencies for the following libraries:
usbcore.ko
則是模組依賴額問題
可檢視make menuconfig 是否選中相關模組, 以及DEPENDS 選項的配置

相關推薦

嵌入式Linux最簡單驅動模組編譯剖析

# 最簡單的核心模組: #include<linux/module.h> #include<linux/kernel.h> static int my_driver_init(void) { printk("hello\n"); return

openwrt 驅動模組編譯載入

1、要編譯一個適用於openwrt系統的nids驅動, 原始碼由硬體商提供。 首先在ubuntun 下 make 編譯一下, 檢視是否編譯正常,是否出現錯誤, 修改錯誤。 OpenWrt環境下的編譯 1、 進入openwrt的編譯目錄,即

linux核心外部驅動模組編譯報錯ERROR: "******" [drivers/**.ko] undefined!

我往linux核心裡新增一個驅動模組,根據《linux裝置驅動》第三版,修改Makefile如下: obj-m := GobiNet.o GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o 但是出現瞭如下錯誤:

linux驅動模組開機自動載入,以及應用程式開機自啟動

第一種方法:相對來說簡單 將測試程式放在/bin底下,然後用vi編輯/etc/init.d/rcS,加上/bin/應用程式名 &,加上&表示後臺執行 這兩個功能的實現都是通過設定啟動指令碼來實現的。啟動指令碼的一般存放路徑是 /etc/init.d/rc

linux下 驅動模組編譯步驟

現在我來說明一下這個Makefile。請記住是大寫的Makefile而不是小寫的makefile; obj-m :這個變數是指定你要聲稱哪些模組模組的格式為 obj-m := <模組名>.omodules-objs :這個變數是說明聲稱模組modules需要的目標檔案 格式要求   <模組

驅動模組編譯錯誤提示--implicit declaration of function ‘kmalloc’

驅動模組編譯時出現如下錯誤: error: implicit declaration of function ‘kmalloc’ error: implicit declaration of function ‘kfree’ 解決辦法: 新增如下標頭檔案即可: #

核心模組編譯載入&解除安裝及檢視執行結果 -- linux核心

MODPOST 1 modules看到這個的話說明編譯通過了,生成正確的核心模組檔案hellomod.ko =============================================== [載入] 執行insmod hellomod.ko [解除安裝] rmmod hellomod [檢視核心

linux驅動模組編譯(初學者)

現在我來說明一下這個Makefile。請記住是大寫的Makefile而不是小寫的makefile;obj-m :這個變數是指定你要聲稱哪些模組模組的格式為 obj-m := <模組名>.omodules-objs :這個變數是說明聲稱模組modules需要的目標檔案 格式要求   <模組名&

Linux核心驅動模組編譯

核心模組的構建有兩種主要方式:放在核心原始碼樹中或者放在核心程式碼外。 一、放在核心原始碼樹中 在核心的drivers/資料夾下建立好驅動模組資料夾,並完成驅動檔案之後,需要編輯和修改相應的Kconfig和Makefile檔案,使得該模組可以配置到核心中並進行編譯。 1.

linux開發の如何靜態的將驅動模組編譯進核心

在解決這個問題之前,我們先搞明白linux究竟是怎樣管理原始碼中上萬個檔案的。我們看Linux原始碼的目錄,十分科學,基本上看到目錄就可以猜到裡面放的什麼,那怎麼把檔案連線起來,靠的就是Kconfig,它可以告知Makefile那些編譯那些不編譯。第一步:在driver目錄下

linux 核心編譯驅動模組ko的配置以及載入模組解除安裝模組例項測試

linux 核心編譯驅動模組ko的配置以及載入模組、解除安裝模組例項測試一、要讓linux系統支援動態載入驅動模組必須先對linux 核心進行相關的配置,不然編譯不過,載入模組也會載入失敗甚至導致裝置重啟。1、勾選核心Enable loadable module suppor

Linux下載入.ko驅動模組的兩種方法:insmodmodprobe

假設要載入的驅動程式模組名為SHT21.ko 載入驅動模組 方法一: 進入SHT21.ko驅動模組檔案所在的目錄,然後直接 insmod SHT21.ko 即可 方法二: 將SHT21.ko檔案拷貝到/lib/module/#uname -r#/目

Linux裝置驅動模組載入示例原理解析

本文介紹Linux裝置驅動模組在設備註冊時如何實現自動載入和建立裝置節點。 在Linux系統中,基於sysfs檔案系統、裝置驅動模型和udev工具可以實現在裝置模組“冷、熱”載入時自動載入裝置對應的驅動程式,同時可以按需在/dev目錄下建立裝置節點。 本文中我搭建好環

linux下驅動模組編譯,動態載入以及解除安裝

Linux驅動模組化編譯、載入、解除安裝 2010-8-27 硬體平臺:OMAPL-138 軟體平臺:linux2.6.32 + Ubuntu 步驟:: 1、編寫first_driver_hello.c檔案,將其放在/linux2.6.32/drivers/char路徑下

openwrt-mt7688編譯燒錄

OpenWrt系統已經發布了多個版本,如下: 釋出時間 版本號 開發代號 2013年4月 12.09 正式版 Attitude Adjust

嵌入式核心及驅動開發之學習筆記(一) 認識使用驅動模組

應用層的程序是通過核心層驅動來訪問硬體的,Linux核心原始碼在每次編譯之後生成一個總的映象,將映象載入記憶體中執行並使用(核心在系統執行時會移植佔用核心空間)。驅動屬於核心原始碼的一部分,如果每次修改驅動都要重新編譯載入核心的話,這態麻煩了,所以我們通過模組,使驅動可以獨立於核心映象之外,並能動態

軟體測試中樁模組驅動模組的概念區別(轉載),打樁

樁模組和驅動模組(以C語言為例):   很多人對樁模組和驅動模組的概念會搞不清楚,那麼下面來介紹這兩個概念:   模組結構例項圖:   假設現在專案組把任務分給了7個人,每個人負責實現一個模組。你負責的是B模組,你很優秀,第一個完成了編碼工作,現在需要開展單元測試工作,先分析結構圖:   1、由於

openwrt中新增自定義驅動模組和APP

驅動模組新增: 1:make menuconfig中的 kernel modules 其中的各個配置選項來自於下面目錄中的.mk檔案 這裡以other.mk為對照,後續我們新增的驅動模組,新增到other分支當中 2:建立模組目錄,路徑是package/kernel

嵌入式核心及驅動開發之學習筆記(一) 認識使用驅動模組

應用層的程序是通過核心層驅動來訪問硬體的,Linux核心原始碼在每次編譯之後生成一個總的映象,將映象載入記憶體中執行並使用(核心在系統執行時會移植佔用核心空間)。驅動屬於核心原始碼的一部分,如果每次修改驅動都要重新編譯載入核心的話,這態麻煩了,所以我們通過模組,使驅動可以獨立

OpenCV contrib 3.2.0擴充套件模組新增編譯(VS2017+OpenCV3.2.0)詳解排坑

一Cmake配置與生成 安裝cmake下載地址:https://cmake.org/download/ 獲取最新版本:cmake-3.8.1-win64-x64.msi(可執行程式,不是壓縮包) 下載完畢直接執行安裝,只有一個步驟要注意, 選擇‘addCmake t