修改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文件在板子上面都无法加载,因为内核版本号不一致。

请问这个问题怎么解决啊,急 啊!!!!
...全文
1952 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

21,600

社区成员

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

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