Menu Home

kernel

How to change Kernel Version String

OS: Android 4.4 Kernel: 3.10.28 这里所谓的修改kernel version string并不是真的修改linux的版本号,因为那样会导致非常多的问题(比如一些驱动会不能用,等等)。所以这里修改的仅仅是/proc系统下的version,而从/proc/version中读取kernel version string是一个通常的做法,所以只需要修改这个就可以了。 kernel/fs/proc/version.c static int version_proc_show(struct seq_file *m, void *v) { seq_printf(m, linux_proc_banner, utsname()->sysname, utsname()->release, utsname()->version); return 0; } seq_printf和printf的功能很类似,可以输出经格式化的字符串。这里的linux_proc_banner参数实际上是一个格式化字符串,它的定义在文件kernel/init/version.c中: const char linux_proc_banner[] = “%s version %s” ” (” LINUX_COMPILE_BY “@” LINUX_COMPILE_HOST “)” ” (” LINUX_COMPILER “) %s\n”; 所以很明显你可以通过修改上面2个文件来定制你自己的version string. 接下来看看Android的setttings中是如何来读取kernel version的: […]

linux kernel driver自动创建设备

static int watchdog_init(void) { wdt_major = register_chrdev(0, “lte8718wdt”, <e8718wdt_fopts); wdt_class = class_create(THIS_MODULE, wdt_name); device_create(wdt_class, NULL, MKDEV(wdt_major, 0), NULL, wdt_name); } static int watchdog_exit(void) { device_destroy(wdt_class, MKDEV(wdt_major, 0)); class_destroy(wdt_class); unregister_chrdev(lte8718wdt_major, “lte8718wdt”); }

编译单个linux kernel 模块

kernel 编译单个模块 假设需要单独编译resiserfs内核模块: 1)make menuconfig load 一下当前目录下的.config 文件 进入文件系统选项,选择reiserfs 模块,使其前面有个M 保存退出 2)make prepare 不运行该命令make 时将会报错 3)make scripts 4)make M=fs/reiserfs 开始编译单个模块,编译完成后模块生成在fs/reiserfs.ko