Ubuntunbsp;2.6.38-8内核树建立nbsp;加载he…

2024-01-14 08:48

本文主要是介绍Ubuntunbsp;2.6.38-8内核树建立nbsp;加载he…,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来源:http://www.linuxidc.com/Linux/2011-07/38615.htm
先查看自己OS使用的内核版本
root@ubuntu:/# ~$ uname -r
2.6.38-8-generic

如果安装系统时,自动安装了源码。在 /usr/src 目录下有对应的使用的版本目录。例如下(我是

自己下的)

root@ubuntu:/usr/src#  ls

linux-2.6.38.8                                    //解压缩后的
linux-2.6.38.8.tar.bz2       //这个是自己下载的,                     sudo apt-get install linux-source-2.6.38.8                      
linux-headers-2.6.38-8
linux-headers-2.6.38-8-generic
进到:/usr/src/linux-2.6.38# 下然后   
1.1. make oldconfig
1.2. make
1.3. make modules
1.4. make modules_install
执行结束后,可以看到在当前目录下生成了一个新的文件: vmlinux, 其属性为-rwxr-xr-x。

然后 :

root @ubuntu: /usr /src /linux-source-2.6.38 .8#make modules
root @ubuntu: /usr /src /linux-source-2.6.38.8 #make modules_install

执行结束之后,会在/lib/modules下生成新的目录/lib/modules/2.6.38.8-generic/
。 在随后的编译模块文件时,要用到这个路径下的build目录(PS:build其实是一个符号链接文

件,链接到/usr/src目录下相应的内核头文件目录 jarson 2011.06.13 注)。

至此,内核编译完成。可以重启一下系统。

在自己的文件夹下面 我的是  /home/tl/module_test

编写《linux设备驱动程序》中的hello world 模块,vim hello.c

#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("DuAL BSD/GPL");
static int  hello_init(void)
{
   printk(KERN_ALERT "hello module init\n");
   return 0;
}
static void hello_exit(void)
{
   printk(KERN_ALERT "hello module exit\n");
}
module_init(hello_init);
module_exit(hello_exit);

编写完成后  :wq保存退出。

下一步就是编写Makefile文件,

obj-m := hello.o
KERNELDIR := /lib/modules/2.6.38-8-generic/build
PWD := $(shell pwd)

modules:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

编写完成  :wq保存退出

然后下一步就是在

root@ubuntu:/home/tl/module_test# make
make -C /lib/modules/2.6.38-8-generic/build  M=/home/tl/module_test modules
make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.38-8-generic'
  CC [M]  /home/tl/module_test/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  LD [M]  /home/tl/module_test/hello.ko
make[1]:正在离开目录 `/usr/src/linux-headers-2.6.38-8-generic'

root@ubuntu:/home/tl/module_test# insmod ./hello.ko

hello module init

root@ubuntu:/home/tl/module_test# rmmod hello

hello module exit

根据系统传递消息的机制不同,运行insmod和rmmod,可能不在屏幕上看到任何输出,实际上,它可能输出到

系统的日志文件里面,比如/var/log/kern.log。

到此一个最简单的内核模块就加载和卸载完成。我一直在root下面操作的,没有切换。






 

这篇关于Ubuntunbsp;2.6.38-8内核树建立nbsp;加载he…的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/604588

相关文章

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

建立升序链表

题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2744 解决:1186 题目描述: 建立一个升序链表并遍历输出。 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。 输出: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出。 样例输

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

LLM系列 | 38:解读阿里开源语音多模态模型Qwen2-Audio

引言 模型概述 模型架构 训练方法 性能评估 实战演示 总结 引言 金山挂月窥禅径,沙鸟听经恋法门。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖铁观音的小男孩,今天这篇小作文主要是介绍阿里巴巴的语音多模态大模型Qwen2-Audio。近日,阿里巴巴Qwen团队发布了最新的大规模音频-语言模型Qwen2-Audio及其技术报告。该模型在音频理解和多模态交互

JeecgBoot 升级springboot版本到2.6.0

1. 环境描述 Jeecgboot 3.0,他所依赖的springboot版本为2.3.5Release,将springboot版本升级为2.6.0。过程全纪录,从2开始描述。 2. 修改springboot版本号 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-pare

Ubuntu22.04回退系统内核

文章目录 起因回退操作卸载内核禁止内核升级 起因 最近因为系统内核自动升级,导致显卡驱动检测不到,炼丹环境被破坏。无奈只能重装驱动,于是跟着手册操作发现驱动要求的是内核版本是5.15.0-25-generic,而我通过uname -r发现这时候的内核版本是6.8.0-40-generic,看来只能回退了。 我搜索了网上很多的文章,没有一篇文章能够完全解决这个问题,所以在我多次尝

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte