openWRT内核模块加载
来源:互联网 发布:linux用dd制作启动盘 编辑:程序博客网 时间:2024/05/20 22:01
转自:openwrt增加内核模块的方法
开发环境为ubuntu.首先搭建编译环境。
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev gawk asciidoc libz-dev git-core build-essential libssl-dev
下面就是下载源码,源码分两种,一种是最新版但不稳定,就是trunk版,一种是相对稳定版,backfire版
trunk版下载命令:svn co svn://svn.openwrt.org/openwrt/trunk/
backfire版下载命令:svn co svn://svn.openwrt.org/openwrt/branches/backfire/
如果不是最新下载,最好定期更新代码,命令为
./scripts/feeds update –a
./scripts/feeds install –a
接着就是编译了。编译方法如下:
make defconfig
make menuconfig进入定制界面,选择自己的设备类型。
make V=99
下面就是增加内核模块的方法了
进入package目录,创建模块目录
cd backfire/package
mkdir example
进入example目录,创建Makefile文件和代码路径
cd example
touch Makefile
mkdir src
Makefile具体内容如下:
- #
- # Copyright (C) 2008 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:=example
- PKG_RELEASE:=1
- include $(INCLUDE_DIR)/package.mk
- define KernelPackage/example
- SUBMENU:=Other modules
- TITLE:=example driver
- DEPENDS:=@LINUX_2_6
- FILES:=$(PKG_BUILD_DIR)/*.$(LINUX_KMOD_SUFFIX)
- KCONFIG:=
- endef
- define KernelPackage/example/description
- Kernel module to example
- endef
- EXTRA_KCONFIG:= \
- CONFIG_EXAMPLE=m
- EXTRA_CFLAGS:= \
- $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(EXTRA_KCONFIG)))) \
- $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(EXTRA_KCONFIG)))) \
- 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,example))
3.进入src目录,创建代码路径和相关源文件
cd src
touch example.c Kconfig Makefile
example.c具体内容如下:
- #include <linux/init.h>
- #include <linux/module.h>
- #include <linux/kernel.h>
- /* hello_init ---- 初始化函数,当模块装载时被调用,如果成功装载返回0 否则返回非0值 */
- static int __init hello_init(void)
- {
- printk("I bear a charmed life.\n");
- return 0;
- }
- /* hello_exit ---- 退出函数,当模块卸载时被调用 */
- static void __exit hello_exit(void)
- {
- printk("Out, out, brief candle\n");
- }
- module_init(hello_init);
- module_exit(hello_exit);
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("zhangjiefeng");
- config EXAMPLE
- tristate "Just a example"
- help
- This is a example, for debugging kernel model.
- If unsure, say N.
- obj-$(CONFIG_EXAMPLE) += example.o
make menuconfig
Kernel modules --->
Other modules --->
kmod-example
选项设置为M,保存退出
然后编译该模块:
make package/example/compile
5.编译出的文件可以在主路径的以下路径找到
./staging_dir/target-mips_r2_uClibc-0.9.30.1/root-lantiq/lib/modules/2.6.32.33/example.ko
./build_dir/linux-lantiq_ar9/example/ipkg-lantiq/kmod-example/lib/modules/2.6.32.33/example.ko
./build_dir/linux-lantiq_ar9/example/example.ko
./build_dir/target-mips_r2_uClibc-0.9.30.1/OpenWrt-SDK-lantiq-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1/staging_dir/target-mips_r2_uClibc-0.9.30.1/root-lantiq/lib/modules/2.6.32.33/example.ko
./build_dir/target-mips_r2_uClibc-0.9.30.1/root-lantiq/lib/modules/2.6.32.33/example.ko
注:我们使用./build_dir/linux-lantiq_ar9/example/example.ko
- openWRT内核模块加载
- Openwrt添加内核模块
- openwrt安装内核模块* satisfy_dependencies_for
- openwrt 添加自定义内核模块
- openwrt 添加自定义内核模块
- OpenWRT添加模块(三)内核模块
- Openwrt 学习记录:openWRT添加内核模块(五)
- OpenWRT 增加内核模块及应用方法
- OpenWRT 增加内核模块及应用方法
- openwrt增加内核模块的方法
- OpenWRT 增加内核模块及应用方法
- OpenWRT 增加内核模块及应用方法
- 为 OPENWRT 编译额外的内核模块
- OpenWRT 增加内核模块及应用方法
- OpenWRT 增加内核模块及应用方法
- OpenWRT 增加内核模块及应用方法
- OpenWRT 增加内核模块及应用方法
- OpenWrt添加内核模块软件包(二)
- 求助文件完整性比对的方法
- AndroidManifest.XML文件功能、元素、标签汇总
- IOS7&IOS8下cell下划线两端补齐
- 解析c++中的虚函数
- JAVA笔记:Java常用类库
- openWRT内核模块加载
- Java序列化技术
- Android CheckList
- 利用sqoop将hive数据导入导出数据到mysql
- android转场动画windowAnimation和ActivityAnimation的区别
- .Net中SqlCommand类的分析
- Vector Clock算法的理解
- 由ObReferenceObject推导windows对象管理器
- 听几个月人均年银行门口