linux内核编译环境配置

摘要:
如果Linux内核编译环境未配置为编译内核,则只需安装与内核匹配的kernel-devel开发包。在yum中,如果直接运行yu_installkernel-devel,则安装的开发包版本通常高于使用的内核版本,因此无法使用。要更改yum的配置文件,请禁用yum功能以自动查找新版本。还有其他方法可供参考:http://home.lupaworld.com/home-space-uid-296848-do-blog-id-241587.htmlhttp://blog.csdn.net/iczyh/article/details/3564367经典hellowword测试////#cathello。c#include #include #includestaticint_inithl_init{printk(“Hello,World!cleanup”);}模块_初始化;模块_退出;模块_许可证;从单个c文件#catMakefileobj-m+=hello生成的模块的经典Makefile。oCURRENT_PATH:=$#模块LINUX_KERNEL:=$#LINUX内核源代码LINUX_ KERNEL_PATH:=/usr/src/kernels/$#LINUX内核源码的绝对路径all:Make-C$M=$modules#编译模块后,clean:Make-C$M=$clean#清理并编译Make后,您好。生成ko。在cleanup[]中是时间戳。
linux内核编译环境配置
如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可。即是/lib/modules/`uname -r`/build -> /usr/src/kernels/`uname -r`指定。

在yum中,如果直接运行 yum install kernel-devel, 一般安装的开发包版本要高于所使用的内核版本,不能使用。要更改yum 的配置文件,禁掉yum自动寻找新版本的功能。
即是在/etc/yum.repos.d/fedora-updates.repo 中的[update*]有关的enable=1,全部改为0.
OK,yum install kernel-devel 即可。

还有其他方法,以下可供参考:
  http://home.lupaworld.com/home-space-uid-296848-do-blog-id-241587.html 
  http://blog.csdn.net/iczyh/article/details/3564367

经典的hello word测试

  1. ////# cat hello.c
  2. #include <linux/module.h>
  3. #include <linux/kernel.h>
  4. #include <linux/init.h>
  5. static int __init hl_init( void )
  6. {
  7.     printk("Hello,World! init ");
  8.     return 0;
  9. }
  10. static void __exit hl_cleanup( void )
  11. {
  12.     printk("Goodbye, World! cleanup ");
  13. }
  14. module_init(hl_init);
  15. module_exit(hl_cleanup);
  16. MODULE_LICENSE("GPL");

经典的由单个c文件产生模块的Makefile。

  1. # cat Makefile
  2. obj-m += hello.o
  3. CURRENT_PATH := $(shell pwd) #模块所在的当前路径
  4. LINUX_KERNEL := $(shell uname -r) #Linux内核源代码的当前版本
  5. LINUX_KERNEL_PATH := /usr/src/kernels/$(LINUX_KERNEL) #Linux内核源代码的绝对路径
  6. all:
  7.         make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules #编译模块了
  8. clean:
  9.         make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean #清理

编译

Make
就产生了hello.ko。

安装

insmod hello.ko

卸载

 rmmod hello

查看log

 dmesg

点击(此处)折叠或打开

    1. ................
    2. [12238.051159] Hello,World! init
    3. [12242.458122] Goodbye, World! cleanup
[]中的是时间戳。
 

OK了,这个环境算好了。

免责声明:文章转载自《linux内核编译环境配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇电感的能量储存在哪里-深度解析(4)FPU 浮点数汇编下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ubuntu,kali linux和windows三系统流水账——写给自己

我先说一下ubuntu和windows双系统安装的几种方法,最后总结kali linux的安装,想起什么写什么,所以有点乱。然后记录一下自己的使用过程中遇见的问题和解决的方法,还有我的个人建议。 我个人安装的是目前最新的ubuntu16.04LTS。windows是10.kali linux是2.0。 首先比较一下虚拟机和双系统,我以前一直用的是虚拟机,因...

在openwrt上编译一个最简单的ipk包

1 什么是opkg   Opkg 是一个轻量快速的套件管理系统,目前已成为 Opensource 界嵌入式系统标准。常用于路由、交换机等嵌入式设备中,用来管理软件包的安装升级与下载。   opkg update 更新可以获取的软件包列表   opkg upgrade 对已经安装的软件包升级   opkg list 获取软件列表   opkg install...

linux 应用程序直接读写寄存器或物理内存

1.程序说明: 调试驱动程序时,经常遇到候需要查看或设置寄存器的情况,但是直接更改内核代码又不方便。 这里提供一个应用程序源码能在应用层访问底层寄存器。(网上找到的,进行过更改)。 这里只提供4字节数据的访问,如果需要其他字节宽度则需要更改代码。 line40 增加了O_DSYNC标志,防止cache导致数据写入不及时。 2.应用程序源码 1 #incl...

Linux内核死机调试方法总结

使用空指针和缓冲区溢出是产生oops的两个最常见原因。 1、直接查看oops信息,首先查找源代码发生oops的位置,通过查看指令寄存器EIP的值,可以找到位置。再查找函数调用栈可以得到更多的信息。从函数调用栈可辨别出局部变量,全局变量和函数参数。较为重要的信息就是指令指针(EIP),即出错指令的地址。 例如:在函数faulty_read的oops信息的函数...

破解Linux系统开机密码

在我们使用Linux虚拟机的时候,经常会忘记自己设置的开机密码,无奈之下只有重新建一个虚拟机,然而新建往往会浪费掉我们很多时间,这时候,知道如何破解Linux系统密码就显得很重要了。 下面我们使用boot方法破解Linux的开机密码: 一、操作系统 CentOS6.5(其他Linux系统类似) 二、操作步骤 1、忘记了root的登录密码,登陆时显示“鉴定...

Linux下librtmp使用及编程实战

  最近想做rtmp的推流、直播的小项目,不想直接使用FFmpeg进行推流,FFmpeg进行推流特别简单,因为它已经将编码以及librtmp都集成好了,没啥意思。FFmpeg推流的例子,在雷神的博客里可以找到。这里主要是基于librmtp,结合libx264进行压缩,进行一些实验,包括三大部分: rtmp流保存 flv文件推流 h264推流 首先是rt...