修改utsrelease.h 文件里面的版本号后

cavalier_man 2010-12-16 10:36:55
我想宿主机上编译一个在arm板上运行的ko文件,现在板子上的内核版本号是2.6.32.2-FriendlyARM,宿主机上编译驱动的代码里面内核版本号是2.6.32.2,听其他人说这2个版本没有区别,直接修改include/linux/utsrelease.h文件里面的版本宏就可以了,我照这么做后,保存该文件。如果不开始编译这个文件就还是我修改的,但是只要我一开始编译,这个文件就会变成原来我没有修改过的,即版本号又变回了2.6.32.2,这样的话,我每次编译出来的ko文件在板子上面都无法加载,因为内核版本号不一致。

请问这个问题怎么解决啊,急 啊!!!!
...全文
2347 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nevinhappy 2013-03-29
  • 打赏
  • 举报
回复
注意,utsrelease.h是一个自动生成的文件,没有办法修改,但这个数据是根据Makefile和.config的内容进行生成的,通过修改这两个文件的内容,可以改变! /usr/src/linux/Makefile: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 39 EXTRAVERSION = -gentoo-r3 ...... /usr/src/linux/.config: CONFIG_LOCALVERSION="-debug" 然后,执行make时: localhost linux # make scripts/kconfig/conf --silentoldconfig Kconfig CHK include/linux/version.h CHK include/generated/utsrelease.h UPD include/generated/utsrelease.h 对应的utsrelease.h的内容为: #define UTS_RELEASE "2.6.39-gentoo-r3-debug"
cavalier_man 2010-12-17
  • 打赏
  • 举报
回复
不好意思,这个代码我没看懂啊,能给我具体解释一下是怎么改内核版本号的吗

#ifndef uname_hack_fake_machine
# define uname_hack_fake_machine "i486"
#endif

#include <linux/module.h>
#include <linux/init.h>
#include <linux/utsname.h>
#include <linux/version.h>

#if LINUX_VERSION_CODE >= 132630
# define uname_hack_uts_machine utsname()->machine
#else
# define uname_hack_uts_machine system_utsname.machine
#endif

#define uname_hack_uts_machine_len sizeof(uname_hack_uts_machine)

static char uname_hack_uts_machine_save[uname_hack_uts_machine_len];

static int __init uname_hack_init_module( void )
{
memcpy(uname_hack_uts_machine_save, uname_hack_uts_machine, uname_hack_uts_machine_len);
memset(uname_hack_uts_machine, uname_hack_uts_machine_len, '\0');
memcpy(uname_hack_uts_machine, uname_hack_fake_machine, sizeof(uname_hack_fake_machine));
return (0);
}

static void __exit uname_hack_cleanup_module( void )
{
memcpy(uname_hack_uts_machine, uname_hack_uts_machine_save, uname_hack_uts_machine_len);
}

module_init(uname_hack_init_module);
module_exit(uname_hack_cleanup_module);
cavalier_man 2010-12-17
  • 打赏
  • 举报
回复
谢谢了,我试试第一种方法
曹大夯 2010-12-17
  • 打赏
  • 举报
回复
或者,重新编译你的宿主机内核。在make menuconfig时候,General Setup -> Local version - append to kernel release 设置kernel_release的内容加上FriendlyARM。(CONFIG_LOCALVERSION="FriendlyARM").

不过,不是通过交叉编译环境生成的KO文件,在你的ARM板上照样加载不了吧?你的宿主机的CPU是什么?应该不是ARM吧?如果不是的话,我觉得还是会有问题。
曹大夯 2010-12-17
  • 打赏
  • 举报
回复
include/linux/utsrelease.h文件是编译中自动生成的吧。

要修改系统的内核版本号,需要驱动里面进行。
有个Patch你可以参考
http://ftp.cross-lfs.org/pub/clfs/conglomeration/uname_hack/uname_hack-20080713.tar.bz2

将utsname()->release的内容改了就好了。

曹大夯 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cavalier_man 的回复:]

哈哈,我找到简单方法了,修改源代码根目录下的makefile文件
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 32
EXTRAVERSION = 2-FriendlyARM #这里原来是.2
NAME=Woozy Numbat
这样修改后编译出来的模块文件就和arm板上的内核版本号一致了,都为2.6.32.2-FriendlyARM
[/Quote]
Good!恭喜啊!

utsname()是在内核空间里面存着的相关的内核信息。例子里面做的事就是在加载驱动的时候,顺便把内核信息修改了。



cavalier_man 2010-12-17
  • 打赏
  • 举报
回复
哈哈,我找到简单方法了,修改源代码根目录下的makefile文件
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 32
EXTRAVERSION = 2-FriendlyARM #这里原来是.2
NAME=Woozy Numbat
这样修改后编译出来的模块文件就和arm板上的内核版本号一致了,都为2.6.32.2-FriendlyARM
随着通信电子技术的迅速发展,信息技术给家居行业产生了深远的影响,家居环境的智能化监控已经成为智能家居的一个重要的发展方向。人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们生活更加安全、舒适、便捷、智能。本文根据智能家居的发展背景和研究现状,并且从实用性和可行性角度出发,研究设计了一种基于STM32单片机的智能家居系统。该系统由一个多功能综合的技术系统组成,各个多功能子系统间具有协同配合能力。基于STM32单片机实现的功能子系统包括:智能温度检测,智能湿度检测,智能烟雾/火灾检测智能检测,无线传输,人机交互机构,风扇调节,报警模块。 整个系统分为前端51单片机采集板和后端STM32单片机接收板。 采集板使用DHT11温湿度传感器、MQ烟雾传感器完成室内家居环境的采集。然后通过nRFL24L01将采集到的数据发送给后端。接收板使用LCD1602完成数据显示、使用蜂鸣器模块报警,使用风扇驱动模块调节室内家居环境。本文完成了智能家居控制系统前端、后端软硬件的设计,使用Altium designer绘制了电路原理图,使用Keil C完成了51单片机和STM32单片机的编程与调试。 最后,对本文设计的基于STM32的智能家居控制系统进行部署调试。试验结果表明,该系统可成功应用在智能家居环境检测调节和火灾安全防护的领域,可提高家居生活智能化水平。

21,620

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧