OpenWRT 增加核心模組及應用方法

2021-06-23 01:41:41 字數 4939 閱讀 8191

進入package目錄,建立模組目錄

cd mcp/branches/v1.1-beta1/mcp/package

mkdir example

進入example目錄,建立makefile檔案和**路徑

cd example

touch makefile

mkdir src

makefile具體內容如下:

# kernel module example

include $(topdir)/rules.mk

include $(include_dir)/kernel.mk

pkg_name:=example

pkg_release:=1

include $(include_dir)/package.mk

define kernelpackage/example

submenu:=other modules

depends:=@target_octeon

title:=support module for example

autoload:=$(call autoload,81,example)

files:=$(pkg_build_dir)/example/example.$(linux_kmod_suffix)

endef

define build/prepare

mkdir -p $(pkg_build_dir)

$(cp) -r ./src/* $(pkg_build_dir)/

endef

define build/compile

$(make) -c "$(linux_dir)" \

cross_compile="$(target_cross)" \

arch="$(linux_karch)" \

subdirs="$(pkg_build_dir)/example" \

extra_cflags="-g $(buildflags)" \

modules

endef

$(eval $(call kernelpackage,example))

3.進入src目錄,建立**路徑和相關原始檔

cd src

mkdir example

cd example

touch example.c kconfig makefile

example.c具體內容如下:

#include

#include

#include

/* hello_init ---- 初始化函式,當模組裝載時被呼叫,如果成功裝載返回0 否則返回非0值 */

static int __init hello_init(void)

/ * hello_exit ---- 退出函式,當模組解除安裝時被呼叫 */

static void __exit hello_exit(void)

module_init(hello_init);

module_exit(hello_exit);

module_license("gpl");

module_author("zhangjiefeng");

kconfig具體內容如下:

config example

tristate "just a example"

default n

help

this is a example, for debugging kernel model.

if unsure, say n.

makefile具體內如如下:

obj-m := example.o

回到主路徑 mcp/branches/v1.1-beta1/mcp/,編譯選項配置儲存並編譯

make menuconfig

kernel modules --->

other modules --->

kmod-example

選項設定為m,儲存退出

然後編譯該模組:

make package/example/compile

5.編譯出的檔案可以在主路徑的以下路徑找到

./staging_dir/target-mips64_eglibc-2.10.1/root-octeon/lib/modules/2.6.30.9/

./build_dir/linux-octeon/example/ipkg-octeon/kmod-example/lib/modules/2.6.30.9/

./build_dir/linux-octeon/example/example/

檔名為:example.ko

注:我們使用./build_dir/linux-octeon/example/example/example.ko

二、使用者態工具新增方法

1.進入package目錄,建立工具目錄

cd mcp/branches/v1.1-beta1/mcp/package

mkdir example1

2.進入example1目錄,建立makefile檔案和**路徑

cd example1

touch makefile

mkdir src

該makefile具體內容如下:

#user mode tool example

include $(topdir)/rules.mk

include $(include_dir)/kernel.mk

pkg_name:=example1

pkg_release:=1

pkg_build_dir := $(kernel_build_dir)/$(pkg_name)

include $(include_dir)/package.mk

define package/example1

section:=utils

category:=base system

title:=build for example1 commands

endef

define package/example1/description

this package contains an utility useful to use example1 commands.

endef

define build/prepare

mkdir -p $(pkg_build_dir)

$(cp) ./src/* $(pkg_build_dir)/

endef

target=$(firstword $(subst -, ,$(board)))

make_flags += target="$(target)"

target_cflags += -dtarget_$(target)=1 -wall

define build/example1/compile

$(make) -c "$(linux_dir)" \

cross_compile="$(target_cross)" \

arch="$(linux_karch)" \

subdirs="$(pkg_build_dir)" \

extra_cflags="$(buildflags)"

endef

define package/example1/install

$(install_dir) $(1)/sbin

$(install_bin) $(pkg_build_dir)/example1 $(1)/sbin/

endef

$(eval $(call buildpackage,example1))

3.進入src目錄,建立相關原始檔

cd src

touch example1.c makefile

example1.c 具體內容如下:

#include

int main(void)

makefile檔案具體內容如下:

.notparallel:

#octeon_root=$(pwd)/src/

cc=~/openwrt/main/staging_dir/toolchain-mips64_gcc-4.4.1_eglibc-2.10.1/usr/bin/mips64-openwrt-linux-gnu-gcc

cflags=-mips64r2 -mabi=64 -march=octeon -mtune=octeon

lflags=

.phony: all

all: example1

example1:example1.c

$ $ $ -w -g -wall -wno-unused-parameter -duse_runtime_model_checks=1 \

-o $@ example1.c

4.回到主路徑 mcp/branches/v1.1-beta1/mcp/,編譯選項配置儲存並編譯

make menuconfig

base system --->

example1

選項設定為m,儲存退出

然後編譯該模組:

make package/example1/compile

5.編譯出的檔案可以在主路徑的以下路徑找到

./staging_dir/target-mips64_eglibc-2.10.1/root-octeon/sbin/

./build_dir/linux-octeon/example1/ipkg-octeon/example1/sbin/

./build_dir/linux-octeon/example1/

檔名為:example1

注:我們使用./build_dir/linux-octeon/example1/example1

根據openwrt安裝介紹,將核心模組和使用者態工具在板子上執行,到這就簡單了往下我就不貼了。

openwrt增加核心模組的方法

下面就是增加核心模組的方法了 進入package目錄,建立模組目錄 cd backfire package mkdir example 進入example目錄,建立makefile檔案和 路徑 cd example touch makefile mkdir src makefile具體內容如下 th...

為 OPENWRT 編譯額外的核心模組

舉個例子,如果想在路由器上跑 openwrt 並未包含的 rtl8188eu 驅動模組該怎麼辦呢?在這裡給出一種快捷但是比較 dirty 的辦法 否則應該自己寫個 package 首先得有編譯韌體時留下的 kernel 的原始碼,包括編譯過程中生成的一些檔案。下面假定 openwrt 的原始碼目錄在...

增加驅動模組到核心樹

現在要把下面的驅動模組新增到核心樹中 module param.ko num.c include include include include static int num 0 static char string this is a test static int array 3 static ...