开发环境为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增加内核模块的方法相关推荐

  1. openwrt配置内核驱动_openwrt 增加RTC(MCP7940 I2C总线)驱动详解

    标签: 一.硬件平台 1.1 控制器:MT7620(A9内核) 1.2 RTC芯片:MCP7940(I2C总线) 二.软件平台 2.1.开发环境:Ubuntu12.04 2.2.软件版本:openwr ...

  2. openwrt配置内核驱动_openWRT最小内核/应用模块的添加++++config.in/Kbuild调用树(先后顺序)...

    openWRT编译初体验: sudo apt-get update sudo apt-get install gcc g++ binutils patch bzip2 flex bison make ...

  3. openwrt配置内核驱动_Openwrt编译 -- 用户自定义添加app的开机自启动

    一.概述 1.在openwrt系统内init进程被procd取代,procd作为父进程可以监控子进程的状态.一旦子进程退出后即可在某一个时刻尝试进行重启进程. 2.如果应用软件需要在 boot 时自动 ...

  4. openwrt配置内核驱动_OpenWrt添加驱动模块

    1. 添加模块目录 在package/kernel/下执行命令: mkdir example 2. 建立Makefile 在package/kernel/example建立Makefile文件,命令: ...

  5. openwrt配置内核驱动_为斐讯K2P编译OpenWRT LEDE,并启用mtk闭源wifi驱动及H3C认证

    写在最前:只有A1/A2版的K2P才能照本文编译固件并刷入,B1/B2版切莫作死. 一.简述 写在最前,只有A1/A2版本的K2P能照本文编译固件并刷入,B1版本切莫作死.虽然斐讯迟早翻车 现在已经翻 ...

  6. linux内核下网络驱动流程,基于Linux内核驱动的网络带宽测速方法与流程

    本发明涉及一种测速方法,尤其是一种网络带宽测速方法. 背景技术: :电信运营商为客户提供一定带宽的Internet接入:为了检验带宽是否达标,一般均由客户使用个人电脑在网页上直接测速.但是随着智能网关 ...

  7. 从零开始学Linux内核驱动--(二)简单内核模块驱动程序

    Linux驱动–(二)简单的内核模块驱动程序 一.概述 Linux中所有的驱动都是以内核模块的形式来实现的,他们与其他所有的内核编译在一起形成一个单独的内核镜像文件(所以说Linux是一个宏内核).当 ...

  8. win7(主机)+win7虚拟机(vmware,被调试机)+windbg配置内核驱动调试

    一.安装环境 主机:Windows 7 虚拟机:VMware 9 +win7(被调试机) Windbg: 6.12 二.虚拟机配置 1.右击虚拟机系统->设置->弹出虚拟机设置框-> ...

  9. Linux内核配置网口驱动,linux内核编译,配置本机驱动

    1.前言 编译linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多驱 ...

最新文章

  1. 起底软银帝国:芯片、机器人、棒球队无所不投
  2. sqlserver 循环赋值变量
  3. c# 使用Autodesk design Review API
  4. 网络运维之计算机端口
  5. c语言 12大于12么,【C语言】第十二章
  6. Hadoop集群完全分布式模式环境部署
  7. Centos7搭建Kubernetes集群
  8. php数组foreach循环添加键值对_php 给数组增加键值对
  9. PostgreSQL 并行查询概述
  10. Futter基础第19篇: 实现调用第三方时间选择器、日期选择器、时间戳
  11. 计算机指令执行过程详解
  12. 高德地图独家携手东方时尚驾驶学校 共推“安全驾驶季”活动
  13. 二、 FATE实战:实现横向逻辑回归任务的训练及预测
  14. 90后薪资5年翻10倍,靠的不是钢琴手,而是真家伙!
  15. 6s连接wifi上不了网络连接服务器未响应,iPhone 6/iPhone 6S 突然连不上wifi,wifi开了连不上wifi信号差...
  16. 独家发布!java总结与心得,下载量瞬秒百万
  17. python入门简单教学
  18. 【CVPR 2021】pixelNeRF: Neural Radiance Fields from One or Few Images
  19. 建筑业企业施工劳务资质备案申请条件及劳务分包的种类
  20. 【Paper】2020_离散多智能体系统的事件触发二分一致性研究_刘雨欣

热门文章

  1. Microbiome:利用Nanopore高通量测序技术解析污水处理体系可移动抗性基因组(一作解读)
  2. Nature Methods:基于人工重组菌群数据的宏基因组的软件评估金标准
  3. 中国林科院亚热带林业研究所林木根际微生物博士后招聘启事
  4. 三线表是什么?R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、通过topclass参数自定义三线表表格的显示形式(显示为类似斑马线、并将所有列居中,包括包含行标签的第一列)
  5. python使用matplotlib可视化余弦曲线cosine、使用plot函数可视化余弦曲线
  6. R语言基于glmnet构建分类模型并可视化特征系数(coefficient)以及L1正则化系数(lambda)实战
  7. R构建径向核支持向量机分类器实战代码(Radial kernel Support Vector Classifier)
  8. 潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(一)
  9. 熊出没之伐木机器人_熊出没第一首富之争:李老板真的是第一吗?难道不是他第一?...
  10. ReSimNet: drug response similarity prediction using Siamese neural networks