OpenWRT 增加内核模块及应用方法

2023-10-27

  1. 进入package目录,创建模块目录
    cd mcp/branches/V1.1-beta1/mcp/package
    mkdir example
  2. 进入example目录,创建Makefile文件和代码路径
    1. cd example
    2. touch Makefile
    3. mkdir src
     Makefile具体内容如下:
    1. # Kernel module example
    2. include $(TOPDIR)/rules.mk
    3. include $(INCLUDE_DIR)/kernel.mk
    4. PKG_NAME:=example
    5. PKG_RELEASE:=1
    6. include $(INCLUDE_DIR)/package.mk
    7. define KernelPackage/example
    8.   SUBMENU:=Other modules
    9.   DEPENDS:=@TARGET_octeon
    10.   TITLE:=Support Module for example
    11.   AUTOLOAD:=$(call AutoLoad,81,example)
    12.   FILES:=$(PKG_BUILD_DIR)/example/example.$(LINUX_KMOD_SUFFIX)
    13. endef
    14. define Build/Prepare
    15.   mkdir -p $(PKG_BUILD_DIR)
    16.   $(CP) -R ./src/* $(PKG_BUILD_DIR)/
    17. endef
    18. define Build/Compile
    19.   $(MAKE) -C "$(LINUX_DIR)" \
    20.     CROSS_COMPILE="$(TARGET_CROSS)" \
    21.     ARCH="$(LINUX_KARCH)" \
    22.     SUBDIRS="$(PKG_BUILD_DIR)/example" \
    23.     EXTRA_CFLAGS="-g $(BUILDFLAGS)" \
    24.     modules
    25. endef
    26. $(eval $(call KernelPackage,example))
3.进入src目录,创建代码路径和相关源文件
  1. cd src
  2. mkdir example
  3. cd example
  4. touch example.c Kconfig Makefile
  example.c具体内容如下:
  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. #include <linux/kernel.h>
  4. /* hello_init ---- 初始化函数,当模块装载时被调用,如果成功装载返回0 否则返回非0值 */
  5. static int __init hello_init(void)
  6. {
  7.    printk("I bear a charmed life.\n");
  8.    return 0;
  9. }
  10. / * hello_exit ---- 退出函数,当模块卸载时被调用 */
  11. static void __exit hello_exit(void)
  12. {
  13.    printk("Out, out, brief candle\n");
  14. }
  15. module_init(hello_init);
  16. module_exit(hello_exit);
  17. MODULE_LICENSE("GPL");
  18. MODULE_AUTHOR("zhangjiefeng");
  Kconfig具体内容如下:
  1. config EXAMPLE
  2.   tristate "Just a example"
  3.   default n
  4.   help
  5.    This is a example, for debugging kernel model.
  6.    If unsure, say N.

  Makefile具体内如如下:

  1. obj-m := example.o

  回到主路径 mcp/branches/V1.1-beta1/mcp/,编译选项配置保存并编译

  1. make menuconfig
  2.   Kernel modules --->
  3.     Other modules --->
  4.       kmod-example

  选项设置为M,保存退出

  然后编译该模块:

  1. make package/example/compile

5.编译出的文件可以在主路径的以下路径找到

  1. ./staging_dir/target-mips64_eglibc-2.10.1/root-octeon/lib/modules/2.6.30.9/
  2. ./build_dir/linux-octeon/example/ipkg-octeon/kmod-example/lib/modules/2.6.30.9/
  3. ./build_dir/linux-octeon/example/example/
  文件名为:example.ko
  注:我们使用./build_dir/linux-octeon/example/example/example.ko
二、用户态工具添加方法
 1.进入package目录,创建工具目录
  1. cd mcp/branches/V1.1-beta1/mcp/package
  2. mkdir example1
 2.进入example1目录,创建Makefile文件和代码路径
  1. cd example1
  2. touch Makefile
  3. mkdir src
 该Makefile具体内容如下:
  1. #User mode tool example
  2. include $(TOPDIR)/rules.mk
  3. include $(INCLUDE_DIR)/kernel.mk
  4. PKG_NAME:=example1
  5. PKG_RELEASE:=1
  6. PKG_BUILD_DIR := $(KERNEL_BUILD_DIR)/$(PKG_NAME)
  7. include $(INCLUDE_DIR)/package.mk
  8. define Package/example1
  9.  SECTION:=utils
  10.  CATEGORY:=Base system
  11.  TITLE:=Build for example1 commands
  12. endef
  13. define Package/example1/description
  14.  This package contains an utility useful to use example1 commands.
  15. endef
  16. define Build/Prepare
  17.   mkdir -p $(PKG_BUILD_DIR)
  18.   $(CP) ./src/* $(PKG_BUILD_DIR)/
  19. endef
  20. target=$(firstword $(subst -, ,$(BOARD)))
  21. MAKE_FLAGS += TARGET="$(target)"
  22. TARGET_CFLAGS += -Dtarget_$(target)=1 -Wall
  23. define Build/example1/compile
  24.   $(MAKE) -C "$(LINUX_DIR)" \
  25.    CROSS_COMPILE="$(TARGET_CROSS)" \
  26.    ARCH="$(LINUX_KARCH)" \
  27.    SUBDIRS="$(PKG_BUILD_DIR)" \
  28.    EXTRA_CFLAGS="$(BUILDFLAGS)"
  29. endef
  30. define Package/example1/install
  31.   $(INSTALL_DIR) $(1)/sbin
  32.   $(INSTALL_BIN) $(PKG_BUILD_DIR)/example1 $(1)/sbin/
  33. endef
  34. $(eval $(call BuildPackage,example1))
3.进入src目录,创建相关源文件
  1. cd src
  2. touch example1.c Makefile
  example1.c 具体内容如下:
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.   printf("Hello, world\n");
  5.   return 0;
  6. }
  Makefile文件具体内容如下:
  1. .NOTPARALLEL:
  2. #OCTEON_ROOT=$(PWD)/src/
  3. CC=~/openwrt/main/staging_dir/toolchain-mips64_gcc-4.4.1_eglibc-2.10.1/usr/bin/mips64-openwrt-linux-gnu-gcc
  4. CFLAGS=-mips64r2 -mabi=64 -march=octeon -mtune=octeon
  5. LFLAGS=
  6. .PHONY: all
  7. all: example1
  8. example1:example1.c
  9.   ${CC} ${CFLAGS} ${LFLAGS} -W -g -Wall -Wno-unused-parameter -DUSE_RUNTIME_MODEL_CHECKS=1 \
  10.     -o $@ example1.c
4.回到主路径 mcp/branches/V1.1-beta1/mcp/,编译选项配置保存并编译
  1. make menuconfig
  2.   Base system --->
  3.    example1
 选项设置为M,保存退出
 然后编译该模块:
  1. make package/example1/compile
5.编译出的文件可以在主路径的以下路径找到
  1. ./staging_dir/target-mips64_eglibc-2.10.1/root-octeon/sbin/
  2. ./build_dir/linux-octeon/example1/ipkg-octeon/example1/sbin/
  3. ./build_dir/linux-octeon/example1/

文件名为:example1
注:我们使用./build_dir/linux-octeon/example1/example1

根据OpenWrt安装介绍,将内核模块和用户态工具在板子上运行,到这就简单了往下我就不贴了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenWRT 增加内核模块及应用方法 的相关文章

  • linux 如何创建卷组

    1 创建一个物理卷 Pvcreate dev sd1 dev sd2 dev sd3 dev sd4 2 用刚才创建的物理卷创建一个卷组 Vgcreate 卷组名 dev sd1 dev sd2 dev sd3 dev sd4 3 创建逻辑
  • unix环境高级编程——文件IO

    本期主题 unix环境高级编程 文件IO 文件IO 0 引言 1 文件描述符 2 IO编程中常用的API接口 1 open函数 2 close函数 3 read函数 4 write函数 5 lseek函数 3 函数sync fsync和fd
  • Linux网络安全-Zabbix入门(一)

    一 基本概念 1 监控目的 运行情况 提前发现问题 2 监控资源类别 公开 tcp udp 端口 私有 cpu 磁盘 监控一切需要监控的东西 只要能够想到 能够用命令实现的都能用来监控 如果想远程管理服务器就有远程管理卡 比如Dell id
  • Client-Server问题

    1 实验内容与要求 需要创建客户Client和服务器Server两个进程 它们通过管道进行通信 Client进程派生3个生产者线程 一个管道线程 共享一个20个slots的缓冲区 每个生产者线程随机产生一个数据 打印出来自己的id 进程 线
  • office2013 excel 打开时提示excel词典xllex.dll文件丢失或损坏

    今天打开Excel时 发现报错 xllex dll文件丢失或损坏 我用的是office2013 网上找了好多都是2007的dll文件 导入不了 于是乎重装office 问题解决 但还是把xllex dll烤出来做个备份吧 参考下面步骤即可
  • Linux使用nvida-smi查看GPU类型

    nvida smi提供一个查看GPU信息的方法 然而这种方式不能查看GPU型号 型号被省略成了GeForce RTX 208 如果我们需要查看GPU的型号 只需要运行nvidia smi L即可 mrfive ubuntu nvidia s
  • win10 Enable developer Mode

    经过漫长的安装过程 win10终于装上了vs2015 rc 写个小程序试试 结果提示 根据提示打开 设置 更新 for developer 据说应该有这么个界面 但是这个界面根本出不来 直接闪退的说 翻 MSDN 终于翻出了解决方法 htt
  • nslookup命令详解

    nslookup命令用于查询DNS的记录 查看域名解析是否正常 在网络故障的时候用来诊断网络问题 nslookup的用法相对来说还是蛮简单的 主要是下面的几个用法 1 直接查询 这个可能大家用到最多 查询一个域名的A记录 nslookup
  • 红帽7.9部署telnet服务

    升级ssh 为预防万一提前配置telnet服务 安装软件包 yum install telnet server yum install xinetd xinetd加入开机自启 systemctl enable xinetd service
  • 程序员的自我修养——链接、装载与库

    1 温故而知新 操作系统概念 北桥 连接高速芯片 系统调用接口 以软件中断的方式提供 如Linux使用0x80号中断作为系统调用接口 多任务系统 进程隔离 设备驱动 直接使用物理内存的弊端 地址空间不隔离 内存使用效率低 程序运行的地址不确
  • 03LinuxC线程学习之线程共享和非共享

    1 线程共享和非共享 1 1 线程共享资源 1 文件描述符表 由于线程间共享进程间的内容 而文件描述符表在主线程的PCB当中 各个线程可以直接去请求访问 所以线程间通信就不需要像进程那样通过管道这些方式通信 2 每种信号的处理方式 即当某个
  • 操作系统 段页式存储管理

    一 引入 分页系统是以页面作为内存分配的基本单位 能有效地提高内存利用率 但信息共享等不方便 分段系统是以段作为内存分配的基本单位 它能够更好地满足用户多方面的需要 信息共享 动态链接等 但采用分区方式管理物理内存 仍然存在碎片问题 段页式
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • OS——文件管理系统磁盘的结构之搞清盘面和柱面

    如上图 每个柱面有三个盘面 即就是3个磁道 柱面可以抽象的理解成是一个套一个的立体的同心圆柱体 例 2019年408真题 磁盘有300个柱面 每个柱面有10个磁道 每个磁道有200个扇区 扇区大小为512B 则磁盘容量 分析 每个柱面有10
  • 【操作系统】王道考研 p42 段页式管理方式

    段页式管理方式 知识总览 分段 分页管理方式中最大的优缺点 关于段式管理会产生外部碎片 ps 分段管理中产生的外部碎片也可以用 紧凑 来解决 只是需要付出较大的时间代价 分段 分页 段页式管理 示意图 先分段 后分页 段页式管理的逻辑地址结
  • 获取openwrt wan口ip方法

    2020年7月30日14点39分 更新 之前写的方法 获取的是wan口的ip和网关 使用过程发现 以有线上网模式为例 获取wan口网关时 若网关中出现连续的1 1 会获取失败 表明该正则表达式是有问题的 即下面这个grep oE 之后的内容
  • 地址映射与共享

    跟踪地址映射过程 1 通过命令 dbg asm启动调试器 在linux 0 11运行test c文件 使其进入死循环 我们的任务就是找到i的地址并将其修改为0使test c程序退出循环 2 在命令行输入crit c使Boch暂停 一般会显示
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位
  • 如何知道我的二进制可执行文件的内存占用量

    我想知道是否有办法知道用 C 语言编码的二进制可执行文件的内存占用量 有关二进制可执行文件的信息 使用OpenWrt分支 Attitude Adjustment 的工具链编译 架构为x86 在 Linux Unix 系统上 您可以使用siz

随机推荐

  • Basic Level 1074 宇宙无敌加法器 (25分)

    题目 地球人习惯使用十进制数 并且默认一个数字的每一位都是十进制的 而在 PAT 星人开挂的世界里 每个数字的每一位都是不同进制的 这种神奇的数字称为 PAT数 每个 PAT 星人都必须熟记各位数字的进制表 例如 0527 就表示最低位是
  • Ubuntu 14.04 将其他盘挂载到/home的子目录下

    Ubuntu 14 04 将其他盘挂载到 home的子目录下 当安装完Ubuntu系统 由于当时没有注意 分配的分区空间太小 经过一段时间安装了各式各样的软件后 常常会遇到 home目录下空间不够的情况 这时除了卸载软件以及重装系统以外 还
  • MDK 编译错误:multiply defined (重复定义)

    这个代码实现很简单 出现重复定义首先检查了自己的头文件 发现没问题 后来经过师兄的点拨 发现他提示后面有 表示有两个头文件key1 c和key c 马上检查了工程 果然发现有两个 c文件 删除一个即可解决问题
  • 广度优先探索例题java_LeetCode:广度优先搜索(BFS)算法(常见面试题)

    今天推荐一道常见的面试算法题 比较实用也比较常见 一 认识广度优先搜索算法 广度优先搜索 BFS 算法是图的一种遍历方法 它的核心思想是从图的某一个节点开始 依次遍历相邻节点 再从这些相邻节点继续向外层节点遍历 直到连通图的所有节点均被访问
  • Django-项目构建(一)

    环境 python3 Django2 window10 工具 pycharm 构建项目前期准备工作 安装python3 Django2 等 略 一 使用git Bash Here 打开git bash Here 构建项目命令 django
  • java取html中的table_从一段html的table标签中按列提取信息

    我们平时经常会遇到提取某个html中某个table的信息 比如 我们要提取出序号 登记编号 出质人等等 我的思路是先通过正则锁定该table 在通过Jsoup来按列解析内容 我将提取信息的过程抽取出了一个方法 其中内含Jsoup和Regex
  • idea配置使用git以及ssh key的介绍使用

    文章目录 1 Git GUI 的使用 2 ssh key 的介绍和使用 安装ssh key 3 idea中配置并使用git idea配置git 1 Git GUI 的使用 首先先将 git gui 汉化一下 把msgs文件夹copy到 Gi
  • 本地把虚拟光驱传到服务器,将文件传到服务器

    将文件传到服务器 内容精选 换一换 监控数据上报功能可以将系统中采集到的监控数据写入到文本文件 并以FTP或SFTP的形式上传到指定的服务器中 使用该功能前 管理员需要在FusionInsight Manager页面进行相关配置 监控数据上
  • windows服务程序中创建用户进程

    最近碰到个问题 需要在服务中检测用户桌面的情况 但是服务程序都是SYSTEM账户下运行 属于Session0 不能检测到用户桌面的情况 所以就需要另启一个用户进程来获取这些信息 然后发送给服务 所以就用到了 CreateProcessAsU
  • 卷积神经网络系列之卷积/池化后特征图大小怎么计算??

    1 卷积后的大小 W 矩阵宽 H 矩阵高 F 卷积核宽和高 P padding 需要填充的0的个数 N 卷积核的个数 S 步长 width 卷积后输出矩阵的宽 height 卷积后输出矩阵的高 width W F 2P S 1 向下取整 h
  • 小米路由器mini 安装openWrt+更新源+挂载U盘+安装python

    刚刚入手一个小米路由器mini 本来就是打算装openWrt的 想试试玩玩看 刷openwrt的基本流程是参考的如下博主的文章 http www right com cn forum thread 147929 1 1 html 没有遇到什
  • BUUCTF [极客大挑战 2019]FinalSQL

    极客大挑战 2019 FinalSQL 操作 脚本 总结 操作 打开题目 又是这个鬼 跟着他的流程走 点按钮 让我们试试别的 告诉我们对了 但是不是这张表 埋坑 怀疑这个地址是存在sql注入的 经过fuzz 发现过滤了空格 union之类的
  • DOM方式实现Excel导入

    DOM解析Excel 在我们的工作场景中经常会遇到数据录入的需求 有些批量数据录入太麻烦 就需要用到批量导入的方式来提高效率 这就涉及到读取Excel数据的技术 Appache Poi提供了DOM解析和SAX解析两种方式 本篇主要记录自己工
  • Windows Terminal 安装gsudo插件

    Gsudo Windows下类似于linux的sudo 可用于提权 新建 Windows Terminal 标签页时可以用于新建有管理员的页面 或者直接sudo将当前页面提权 需要在安装过程中把sudo命令和gsudo命令建立关联 Powe
  • elasticsearch python连接池吗_了解Elasticsearch及其与Python的对接实现

    什么是 Elasticsearch 但我们想查数据的时候就免不了搜索 搜索就离不开搜索引擎 百度 谷歌都是一个非常庞大复杂的搜索引擎 他们几乎索引了互联网上开放的所有网页和数据 然而对于我们自己的业务数据来说 肯定就没必要用这么复杂的技术了
  • 使用的工具

    文档 devdocs 开发知识 css tricks css技巧分享 开发工具 可以检测前端代码规范的工具 sonarlint 还未用过 样式工具 collect ui 用来查看设计的ui界面参考 其他工具 虚拟号码生成 https sms
  • CentOS8配置yum/dnf镜像源

    Centos8 dnf命令 DNF意思是 Dandified Yum 这是下一代的yum软件包管理器 Yum的派生 Centos8开始使用dnf工具来管理软件包 它可以在基于RPM的Linux发行版上安装 更新和删除软件包 它会自动计算依赖
  • MATLAB克劳特算法,克劳特(Crout)(LU)分解法求解线性方程组的matlab实现

    克劳特 Crout LU 分解法求解线性方程组的matlab实现 由会员分享 可在线阅读 更多相关 克劳特 Crout LU 分解法求解线性方程组的matlab实现 3页珍藏版 请在人人文库网上搜索 1 1 克劳特 Crout LU 分解法
  • c语言课程主要目的和内容,C语言程序设计课程教学大纲

    C语言程序设计课程教学大纲 C语言程序设计课程教学大纲 一 本课程的性质 目的和任务 1 课程的性质 本课程是计算机科学与技术专业的一门重要的专业基础课程 它既可以为其它专业课程奠定程序设计的基础 又可以作为其它专业课程的程序设计工具 2
  • OpenWRT 增加内核模块及应用方法

    进入package目录 创建模块目录 cd mcp branches V1 1 beta1 mcp package mkdir example 进入example目录 创建Makefile文件和代码路径 cd example touch M