openwrt配置内核驱动_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 texlive-lang-french gawk asciidoc libz-dev tex4ht git-core
下面就是下载源码,源码分两种,一种是最新版但不稳定,就是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
#include
#include
/* 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"); Kconfig具体内容如下:
config EXAMPLE
tristate "Just a example"
help
This is a example, for debugging kernel model.
If unsure, say N. Makefile具体内如如下:
obj-$(CONFIG_EXAMPLE) += example.o 回到主路径 backfire/,编译选项配置保存并编译
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配置内核驱动_openwrt 增加RTC(MCP7940 I2C总线)驱动详解
标签: 一.硬件平台 1.1 控制器:MT7620(A9内核) 1.2 RTC芯片:MCP7940(I2C总线) 二.软件平台 2.1.开发环境:Ubuntu12.04 2.2.软件版本:openwr ...
- openwrt配置内核驱动_openWRT最小内核/应用模块的添加++++config.in/Kbuild调用树(先后顺序)...
openWRT编译初体验: sudo apt-get update sudo apt-get install gcc g++ binutils patch bzip2 flex bison make ...
- openwrt配置内核驱动_Openwrt编译 -- 用户自定义添加app的开机自启动
一.概述 1.在openwrt系统内init进程被procd取代,procd作为父进程可以监控子进程的状态.一旦子进程退出后即可在某一个时刻尝试进行重启进程. 2.如果应用软件需要在 boot 时自动 ...
- openwrt配置内核驱动_OpenWrt添加驱动模块
1. 添加模块目录 在package/kernel/下执行命令: mkdir example 2. 建立Makefile 在package/kernel/example建立Makefile文件,命令: ...
- openwrt配置内核驱动_为斐讯K2P编译OpenWRT LEDE,并启用mtk闭源wifi驱动及H3C认证
写在最前:只有A1/A2版的K2P才能照本文编译固件并刷入,B1/B2版切莫作死. 一.简述 写在最前,只有A1/A2版本的K2P能照本文编译固件并刷入,B1版本切莫作死.虽然斐讯迟早翻车 现在已经翻 ...
- linux内核下网络驱动流程,基于Linux内核驱动的网络带宽测速方法与流程
本发明涉及一种测速方法,尤其是一种网络带宽测速方法. 背景技术: :电信运营商为客户提供一定带宽的Internet接入:为了检验带宽是否达标,一般均由客户使用个人电脑在网页上直接测速.但是随着智能网关 ...
- 从零开始学Linux内核驱动--(二)简单内核模块驱动程序
Linux驱动–(二)简单的内核模块驱动程序 一.概述 Linux中所有的驱动都是以内核模块的形式来实现的,他们与其他所有的内核编译在一起形成一个单独的内核镜像文件(所以说Linux是一个宏内核).当 ...
- win7(主机)+win7虚拟机(vmware,被调试机)+windbg配置内核驱动调试
一.安装环境 主机:Windows 7 虚拟机:VMware 9 +win7(被调试机) Windbg: 6.12 二.虚拟机配置 1.右击虚拟机系统->设置->弹出虚拟机设置框-> ...
- Linux内核配置网口驱动,linux内核编译,配置本机驱动
1.前言 编译linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多驱 ...
最新文章
- 起底软银帝国:芯片、机器人、棒球队无所不投
- sqlserver 循环赋值变量
- c# 使用Autodesk design Review API
- 网络运维之计算机端口
- c语言 12大于12么,【C语言】第十二章
- Hadoop集群完全分布式模式环境部署
- Centos7搭建Kubernetes集群
- php数组foreach循环添加键值对_php 给数组增加键值对
- PostgreSQL 并行查询概述
- Futter基础第19篇: 实现调用第三方时间选择器、日期选择器、时间戳
- 计算机指令执行过程详解
- 高德地图独家携手东方时尚驾驶学校 共推“安全驾驶季”活动
- 二、 FATE实战:实现横向逻辑回归任务的训练及预测
- 90后薪资5年翻10倍,靠的不是钢琴手,而是真家伙!
- 6s连接wifi上不了网络连接服务器未响应,iPhone 6/iPhone 6S 突然连不上wifi,wifi开了连不上wifi信号差...
- 独家发布!java总结与心得,下载量瞬秒百万
- python入门简单教学
- 【CVPR 2021】pixelNeRF: Neural Radiance Fields from One or Few Images
- 建筑业企业施工劳务资质备案申请条件及劳务分包的种类
- 【Paper】2020_离散多智能体系统的事件触发二分一致性研究_刘雨欣
热门文章
- Microbiome:利用Nanopore高通量测序技术解析污水处理体系可移动抗性基因组(一作解读)
- Nature Methods:基于人工重组菌群数据的宏基因组的软件评估金标准
- 中国林科院亚热带林业研究所林木根际微生物博士后招聘启事
- 三线表是什么?R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、通过topclass参数自定义三线表表格的显示形式(显示为类似斑马线、并将所有列居中,包括包含行标签的第一列)
- python使用matplotlib可视化余弦曲线cosine、使用plot函数可视化余弦曲线
- R语言基于glmnet构建分类模型并可视化特征系数(coefficient)以及L1正则化系数(lambda)实战
- R构建径向核支持向量机分类器实战代码(Radial kernel Support Vector Classifier)
- 潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(一)
- 熊出没之伐木机器人_熊出没第一首富之争:李老板真的是第一吗?难道不是他第一?...
- ReSimNet: drug response similarity prediction using Siamese neural networks