openwrt之字元裝置驅動開發示例

2021-08-19 04:24:28 字數 2822 閱讀 9844

1. 將模板 mydrv 放到 openwrt 原始碼特定目錄 openwrt/package/kernel/下

2. 配置對該驅動的編譯支援

$ cd openwrt

$ make menuconfig

# 選擇 kernel modules -> other modules -> kmod-mydrv

# 按 y 選中

# 儲存退出

3. 字元裝置驅動軟體包 makefile 介紹
include $(topdir)/rules.mk

include $(include_dir)/kernel.mk

include $(include_dir)/package.mk #以上三個用來關聯openwrt

pkg_name:=mydrv #字元裝置驅動模組名稱

pkg_release:=1

#版本號

define kernelpackage/mydrv #核心模組

submenu:=other modules #進行歸類

title:=mydrv #標題

files:=$(pkg_build_dir)/mydrv.ko #模組檔案

kconfig:=

endef

define kernelpackage/mydrv/description

this is a mydrv drivers #描述

endef

make_opts:= \ #編譯前指定工具和核心arch等

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,mydrv))

src 目錄下的 makefile :obj-m += mydrv.o告訴核心新增的模組目標檔名稱為 mydrv.o

4. 編譯驅動包

$ cd openwrt

$ make package/kernel/mydrv/compile v=99

#如果make有問題,試試root使用者

編譯得到的韌體在目錄openwrt/bin/ramips/packages/base/下,名稱為kmod-mydrv_3.18.29-1_ramips_24kec.ipk5. 載入驅動模組到核心及其解除安裝

# 將模組拷貝到 widora

$ opkg install kmod-mydrv_3.14.25-1_ramips_24kec.ipk

# 安裝完成後在目錄 `/lib/modules/3.18.29/`下可以找到驅動

$ insmod mydrv.ko #載入

$ rmmod mydrv.ko #解除安裝

6. 驅動開機自動載入

$ cd /etc/modules.d

$ vi 61-mydrv #61表示不使用外接usb類的自啟動程式,分隔符『-』後面接驅動模組名稱!

# 在建立的該檔案中寫入: mydrv 即驅動的名稱。

# 最後,必須保證 mydrv.ko 驅動模組檔案放在`/lib/modules/3.14.25/`中

$ reboot

$ lsmod #令查詢當前已經載入的驅動模組

2. 配置 openwrt 支援軟體包的編譯

$ cd openwrt

$ make menuconfig

3. 應用程式軟體包原始碼介紹
#include 

#include

#include

#include

#include

#include

#include

int main(int argc , char** argv)

//函式測試

write(fd,&num,1);

read(fd,&num,1);

ioctl(fd,1,1);

close(fd);

return

0; }

4. 編譯應用程式軟體包
$ cd openwrt

$ make

$ make

$ make

package/index v=99

5. 應用程式的安裝和使用
# 將程式拷貝到 widora

openwrt字元裝置驅動開的概述

本此博文的主要目標在於 對linux核心,驅動有初步的認識 1 應用程式使用庫提供的open函式開啟代表led的裝置檔案 2 庫根據open函式傳入的引數執行swi指令,該指令會引起cpu的異常,進入核心。3 核心的一場處理函式根據這些引數找到相應的驅動程式,返回乙個檔案控制代碼給庫,進而返回給應用...

openwrt之字元裝置驅動開發

應用程式 庫 核心 驅動程式的關係 以驅動led為例 應用程式使用庫提供的 open 函式開啟代表 led 的裝置檔案。庫根據 open 函式傳入的引數執行swi指令,該指令會引起 cpu 異常,進入核心。核心的異常處理函式根據這些引數找到相應的驅動程式,返回乙個檔案控制代碼給庫,進而返回給應用程式...

arm linux驅動開發之字元裝置驅動開發

1 先要了解裝置函資料結構 2 然後將驅動註冊到核心中 define chrdevbase major 200 主裝置號 define chrdevbase name chrdevbase 裝置名 static char readbuf 100 讀緩衝區 static char writebuf 1...