進入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 ...