OpenWrt之kmod内核不兼容分析

2023-10-29

OpenWrt之kmod内核不兼容分析


Kmod内核模块MD5校验

include/kernel-defaults.mk

define Kernel/Configure/Default
	# 省略N行
	grep '=[ym]' $(LINUX_DIR)/.config.set | LC_ALL=C sort | $(MKHASH) md5 > $(LINUX_DIR)/.vermagic
endef

可以看到会生成一个.vermagic在根目录下 , 里面包含着md5的校验信息

include/kernel.mk

ifeq ($(TARGET_BUILD),1)
    # 省略N行
  LINUX_VERMAGIC:=$(strip $(shell cat $(LINUX_DIR)/.vermagic 2>/dev/null))
  LINUX_VERMAGIC:=$(if $(LINUX_VERMAGIC),$(LINUX_VERMAGIC),unknown)
	# 省略N行
  endif

再通过cat $(LINUX_DIR)/.vermagic 存放到 LINUX_VERMAGIC变量中

package/kernel/linux/makefile

define Package/kernel
  SECTION:=sys
  CATEGORY:=Kernel
  DEFAULT:=y
  TITLE:=Virtual kernel package
  VERSION:=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)
  URL:=http://www.kernel.org/
  PKG_FLAGS:=nonshared
endef

于是就构建出了 komd这种 5.10.127-1-98140eff27c8328c5dc13f3f595ea43b

如果想自定义MD5 , 可以修改一下.vermagic的生成逻辑

define Kernel/Configure/Default
	# 省略N行
	cp -f $(TOPDIR)/.vermagic $(LINUX_DIR)/.vermagic
endef

在根目录下创建.vermagic文件 , 填入我们想要的MD5 , 即可.


Kmod内核信息

编译好的固件都会生成一份manifest , 里面记录着模块的内核版本 , 发行版本 , 还有MD5

就像这样VERSION:=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)

下面是openwrt-x86-64.manifest的参考:

# 省略N行
kernel - 5.10.127-1-98140eff27c8328c5dc13f3f595ea43b
# 省略N行

我们最主要还是获取这个kernel - 5.10.127-1-98140eff27c8328c5dc13f3f595ea43b98140eff27c8328c5dc13f3f595ea43b这一串MD5

用下面命令也能输出上面的效果

opkg list

OpenWrt的内核信息存放在/usr/lib/opkg/status,

opkg info # opkg info kernel

也能查看已经安装软件包的信息, 也就是输出那个文件的内容


强制安装kmod - 解决kmod内核不兼容

  • 直接上bash脚本
#!/bin/bash
# Author: NueXini
core=$(cat /etc/opkg/distfeeds.conf | grep 'core' | awk '{print $3}')
old_kernel_md5=$(opkg info kernel | grep 'Version' | cut -d '-' -f 3)
new_kernel_md5=$(curl -s "$core/Packages.manifest" | grep -oE -m 1 'kernel \(=.*\)' | awk -F\- '{print $3}' | sed 's,\),,g')
sed -i "s/$old_kernel_md5/$new_kernel_md5/g" /usr/lib/opkg/status
echo 'Finished'

这样就可以安装了, 效果跟opkg 的 force_depends效果是一样的


查看CPU架构

  • 第一种
opkg print-architecture | grep -vE 'all|noarch' | awk '{print $2}'
  • 第二种
# cat /etc/openwrt_release | grep '_TARGET' | cut -d "'" -f 2
cat /etc/openwrt_release | grep '_ARCH' | cut -d "'" -f 2
  • 第三种
opkg info | grep '^Architecture' | grep -vE 'all|noarch' -m 1 | awk -F': ' '{print $2}'
  • 第四种
# cat /etc/opkg/distfeeds.conf | grep -oE 'targets/(.*)/packages' | cut -d '/' -f 2,3
cat /etc/opkg/distfeeds.conf | grep -oE 'packages/(.*)/base' | cut -d '/' -f 2
  • 第五种
# cat /usr/lib/os-release | grep '_BOARD' | cut -d '"' -f 2
cat /usr/lib/os-release | grep '_ARCH' | cut -d '"' -f 2
  • 如果有其他的方法欢迎留言

feeds源参考

腾讯: https://mirrors.cloud.tencent.com/openwrt/

阿里: https://mirrors.aliyun.com/openwrt

清华大学: https://mirrors.tuna.tsinghua.edu.cn/openwrt/

中国科技大学: https://mirrors.ustc.edu.cn/openwrt/

兰州大学: https://mirror.lzu.edu.cn/openwrt/

南阳理工学院: https://mirror.nyist.edu.cn/openwrt/

北京外国语大学: https://mirrors.bfsu.edu.cn/openwrt/

上海交通大学: https://mirror.sjtu.edu.cn/openwrt/

  • 使用方法
sed -i 's,downloads.openwrt.org,mirrors.bfsu.edu.cn/openwrt,g' /etc/opkg/distfeeds.conf

分析到此结束 , Enjoy it ~

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

OpenWrt之kmod内核不兼容分析 的相关文章

  • openwrt篇修改WiFi热点默认名称和主机名

    在如下图文件中 修改ssid 在如下图文件中修改hostname
  • OpenWrt系统配置UCI

    UCI简介 UCI Unified Configuration Interface 是 Openwrt 中的统一配置接口 官方文档参考 每一个程序的配置文件都保存在 etc config 目录 可以通过文本编辑器 uci 一个可执行程序 以
  • qemu 启动自定义文件系统命令

    kvm qemu aarch64 bin qemu system aarch64 M virt smp 8 cpu cortex a76 m 4G nographic kernel out kernel arm64 Image append
  • openwrt路由器-timeout while waiting for PADS.

    最近使用openwrt路由器进行PPPoE拨号的时候 经常出现 远程服务器无响应 的错误 log打印日志如下 pppoe Timeout waiting for PADS packets Unable to complete PPPoE D
  • 拔电源磁盘变成只读Read-only file system

    拔电源磁盘变成只读Read only file system 问题 查询 解决 问题 搭建openwrt的过程中 由于机器没有关机键 而且没有进行后台命令关机 直接拔电源之后 重启 任何操作都提示只读状态 那么这个时候什么都操作不了 无奈只
  • linux内核之无锁缓冲队列kfifo原理(结合项目实践)

    无锁缓冲队列kfifo 1 kfifo概述 2 kfifo功能描述 3 kfifo put与 kfifo get详解 4 kfifo get和kfifo put无锁并发操作 5 总结 6 项目使用介绍 7 其它 userspace 移植实现
  • OpenWrt系统无法进入Luci解决办法之一

    当在OpenWrt系统重启后 打开Luci后台时有时可能会遇到以下错误报告 usr lib lua luci dispatcher lua 577 bad argument 1 to pairs table expected got nil
  • 字符设备驱动相关函数

    Linux内核中 a 使用cdev结构体来描述字符设备 b 通过其成员dev t来定义设备号 分为主 次设备号 以确定字符设备的唯一性 c 通过其成员file operations来定义字符设备驱动提供给VFS的接口函数 如常见的open
  • openwrt路由器(RP-LINK)安装python并设置开机启动程序

    由于项目需求 实际条件限制 需要在某台设备上运行一个python小程序 在工业机器人和云服务器之间实现信息转发的功能 因为机器人也需要通过路由器认证连接校园网 出于简化设备的考虑 不想每次跑程序还得开电脑 我决定尝试在路由器上运行这个程序
  • 嵌入式Linux构建yaffs根文件系统

    嵌入式Linux构建yaffs根文件系统 开发环境说明 ubuntu1404 i686 天嵌光盘里的交叉编译链 版本4 4 3 busybox 1 13 0 下载地址 https busybox net downloads 一 编译busy
  • openwrt上opkg更新报错"opkg_download: Failed to download ............."

    开始搞op的时候 看到op竟然可以直接安装一些插件 激动坏了 因为这东西对嵌入式的小系统来说简直不敢想 但是op就支持了 就是这么任性 好不容易编译了固件 按照网上的教程 telnet进去 首先opkg update 结果没有想象中的华丽更
  • OpenWrt后台管理启用https-OpenSSL

    OpenWrt 默认使用http 访问管理后台 这样不安全 推荐修改为 https 访问 加密数据传输 本文介绍配置步骤 1 卸载旧的ssl软件包 root OpenWrt opkg remove luci ssl px5g px5g mb
  • 编写 LuCI CBI 模型

    编写 LuCI CBI 模型 CBI模型是描述UCI配置文件结构的Lua文件 并且CBI解析器将lua文件转为HTML呈现给用户 所有 CBI 模型文件都必须返回类型为luci cbi Map的对象 CBI 模型文件的范围由 luci cb
  • 1-OpenWrt编译过程-2

    前言 接触 op 已达四年 今年开始梳理整体所学 具体还参考了佐大的视频 对 op 缺乏系统知识的可以尝试 总体而言官方文档和源码是最好的教程 文章目录 编译OpenWrt 概述 1 更新安装所有可选的软件包 2 编译设置 make men
  • openwrt设置定时重启(天/周/月)

    1 进入openwrt管理页面 找到 系统 计划任务 编辑命令行 点击 保存 2 系统 启动项 中找到cron 确认状态为 开启 点击 重启 使计划生效 或重启系统 说明 一定要设置延时 防止无限重启 每天凌晨1点45分 延时70秒后自动重
  • 【Linux】向Linux 5.11.8内核加入新的系统调用

    目录 特殊声明 A mathcal A A 获取root权限
  • 最全的交叉编译Makefile讲解

    最近正在搞交叉编译 参考很多博客 学习了一下Makefile的编写 记录一下Makefile内代码是什么意思 代码如下 简单的hello ko的makefile ifneq KERNELRELEASE obj m hello o else
  • openwrt恢复出厂设置有两种方法

    1 输入以下指令 firstboot mtd r erase rootfs data 2 输入以下指令 mount root firstboot reboot f
  • OpenWrt 学习记录

    OpenWrt 学习记录 ssh setting CodePath review Makefile CURDIR MAKEFILE LIST ssh setting keygen ssh keygen t rsa C hugh win10W
  • jshn - 如何解析 json 包

    我想知道如何在openwrt上轻松解析json 我有 jhsn 来解析 json 这是我的程序 sh 脚本 download weather wget api openweathermap org data 2 5 weather id 2

随机推荐

  • Unity2021与MRTK2.8搭建hololens2环境

    准备工作 Unity2021 Visual Studio2019 混合显示功能工具 下载地址 Download Mixed Reality Feature Tool from Official Microsoft Download Cent
  • PyQt5开始入门

    PyQt5开始入门 1 使用 Qt designer 1 1 配置Qt designer外部工具 两种方式 1 2 配置PyUIC外部工具 1 3 添加入口main运行结果 2 简单的窗口 2 1 带窗口图标 2 2 提示框 2 3 关闭窗
  • 408知识点-操作系统

    操作系统原理 408系列参考王道2021系列书籍 文章目录 操作系统原理 前言 绪论 进程管理 内存管理 文件管理 I O管理 总结 前言 今天正式放假 虽然已经咸鱼了三周了 考研初试结束 把我记在我的笔记本上的东西搬上来分享一下 里面有一
  • Python Web不知道怎么学?看这篇就够了!

    Python有很多作用 接触过python的朋友肯定知道其几乎无所不能 前端 后端 数据 ML AI 自动化 爬虫 数据分析 人工智能等等 第一阶段 Python入门 框架再怎么变 基本语法不会变 基础中的基础 数据类型 循环判断 常用模块
  • 2D地图tile纹理自动拼接算法

    2D地图tile纹理自动拼接算法 文章目录 2D地图tile纹理自动拼接算法 前言 基本算法 RPGMaker MZ中的转换 扩展 前言 如果你玩过RPGMaker MZ之类关卡编辑器的 可能对地图纹理的自动拼接印象比较深刻 本文将详细介绍
  • 批处理set命令变量与等号之间不要加空格

    前两天写一个打包脚本 MyEclipse打不出来包了 使用set设置变量的时候 发现变量总是空 网上查了半天也没找到答案 后来突然发现网上的写法都是等号紧跟变量名后面 将空格去掉试了一下 果然起作用 平常写java习惯在变量名和操作符见加一
  • 网络安全行业要“变天”了

    编辑丨大兔 时至今日 网络攻击的种类日新月异 而伴随着物联网 工业网互联网等场景的变化 技术也正在飞速发展 攻与防的较量水平正变得越来越高 在行业从业者看来 网络攻击的潜在威胁是巨大的 在触网企业中 虽对安全有所耳闻 但均止步于拗口的专业词
  • 【XGBoost】第 3 章:随机森林装袋

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 了解XSS攻击与CSRF攻击

    什么是XSS攻击 XSS Cross Site Scripting 跨站脚本攻击 是一种常见的网络安全漏洞 它允许攻击者在受害者的浏览器上执行恶意脚本 这种攻击通常发生在 web 应用程序中 攻击者通过注入恶意脚本来利用用户对网站的信任 从
  • 【信号用指数、正弦和余弦表示的原因】

    1 正弦 虚数和指数之间的联系 2 指数和正余弦由泰勒公式联系起来
  • 全网最全的微服务+Outh2套餐,Gateway整合Oauth2!(入门到精通,附源码)满足你的味蕾需要(三)

    上篇文章主要讲解Oauth2模块 user service模块 feign模块 那么作为重中之重的gateway 我们将其做成资源服务器来进行开发 一 资源服务器的实现方式 资源服务器在实际开发有两种实现方式 1 gateway做网关转发
  • LaTex学习笔记(书籍的基本实现)

    1 书籍的首页 书籍首页应该是标题与作者 生成代码如下 在正文区输入 title 书籍名称 书籍名 author 作者名称 作者名 date 指令用于删除日期 maketitle 标题结束 eg 若想删除日期 需在标题结束指令 maketi
  • 简述泵站计算机监控主要功,泵站设备安全运行监视有哪些?

    强化中控室监控系统对泵站设备的安全运行监视 是发挥其监视作用的重要内容 安全运行监视主要包括 1 设备状态监视 泵站工彻勺运行需要设备的安全工作 因此作为泵站监视系统的核心 要准确对设备白训犬态进行监视二首先要月豺目关的设备固矛清况与中控室
  • Failed to restart network.service: Unit network.service not found

    在配置完网络设置时重启时会出现这个问题 原因是和NetworkManager 服务有冲突 解决办法就是关闭NetworkManager然后重启一下Network服务 service NetworkManager stop 关闭Network
  • 创新奇智上市:是李开复心血之作 揭秘背后的塔尖孵化模式

    雷递网 雷建平 1月27日报道 青岛创新奇智科技集团股份有限公司 股份代号 2121 简称 创新奇智 今日在港交所上市 发行价为26 30港元 募资净额10 7亿港元 创新奇智开盘价与发行价持平 以开盘价计算 创新奇智市值超140亿港元 创
  • 用免费的谷歌GPU训练神经网络

    前提是先得注册一个google邮箱 再用该邮箱注册一个谷歌云盘 或者直接用这个谷歌邮箱就可以登陆云盘 1 云盘 网址应该是这个 https drive google com drive 不行就试一下这个 https drive google
  • 透视Matplotlib核心功能和工具包 - 不同图形格式

    Matplotlib创建的报告和仪表板可以以不同的方式使用 它们可以在上游Web应用程序中使用 也可以以PDF文件的形式分发 还可以嵌入到GUI工具箱中或在线交互式地使用 在此 我们将学习如何以各种格式保存报告 以便可以将它们分发给使用者以
  • 从零开始学WEB前端——HTML实战练习

    项目介绍 先做个自我介绍 本人是一个没人写前端所以就自学前端的后端程序员 在此项目中我会和大家一起从零基础开始学习前端 从后端程序员的视角来看前端 受限于作者的水平本项目暂时只会更新到前端框架VUE 不会涉及node js 该项目适合零基础
  • element dialog 垂直水平居中显示

    如何让组件中的dialog在可视区域垂直水平居中 先将dialog放到body的下层 保证自己写的样式相对于视口区域生效 element dialog文档中有个append to body属性 将其设置为true 会将dialog扔到bod
  • OpenWrt之kmod内核不兼容分析

    文章目录 OpenWrt之kmod内核不兼容分析 Kmod内核模块MD5校验 Kmod内核信息 强制安装kmod 解决kmod内核不兼容 查看CPU架构 feeds源参考 OpenWrt之kmod内核不兼容分析 Kmod内核模块MD5校验