开如学习LDD3这本书。

  我是在Fedora18上学习的,但我安装的这个版本,/usr/src/下面没有相应的源代码。

自己从KERNEL网站下载相应版本源码(安装驱动有问题)

  于是从kernel的网上下载了一个3.6.10的kernel源码,我的fedora18是这个版本(uname -r查看)。

  下载解压放在/usr/src/kernel/目录下,开始学习

  这里需要修改Kernel源码中Makefile中定义的版本,一般LINUX发行商都会自己定义一个EXTRAVERSION的标识,下载的源码需要与使用的LINUX保存一致,不然,驱动在加载时提示加载不了,如我之前的提示(/var/log/messages的显示):

  version magic '3.6.10 SMP mod_unload 686 ' should be ' 3.6.10-4.fc18.8686 SMP mod_unload 686';

  所以我在kernel中的Makefile修改成如下:

  VERSION = 3

  PATCHLEVEL = 6

  SUBLEVEL = 10

  EXTRAVERSION = -4.fc18.i686

  改完后,你需要在kernel源目录下,make一下(生成后,中途Ctrl+C就可以了,不然会等很久),以生成相应的文件。

  按照上面的步骤,我编译完相应的驱动,也能正确的加载了,但我调用printk时,/var/log/messages中并没有打印相应的信息,找了很久,都找不到原因,问题出来在哪里。

  最后我想是不是下载的内核源码与现在系统使用的一致的问题,于是从fedora下载旧的18版本的源码,安装上,测试,就可以了,虽然仍旧不知问题出来哪里。

  

下面是安装发行商下载的rpm源码包的过程:

  

1:下载源代码RPM文件
  可以在相应的发行商的网站上下载,或使用yumdownloader source kernerl....(完整的包名,注意版本号)

2: 安装rpm包
  rpm -ivh kernel...(rpm文件),在安装之前可以执行yum-builddep kernerl...(rpm文件),检查相关的依赖性(这一步也可以后面做)
  在安装的过程中,如果出现如下错误:
  warning: user mockbuild does not exist – using root
  warning: group mockbuild does not exist – using root
  新建一个组和一个帐号就好了。
  #groupadd mockbuild
  #useradd mockbuild -g mockbuild
  然后再重新安装

3:将源码转成可用状态:
  进入SPECS目录
  cd ~/rpmbuild/SPECS
  执行以下命令(如果没有安装rpmbuild,执行yum install rpm-build安装)
  rpmbuild -bp –target=$(uname -m) kernel.spec (target选项前是两个-)
  如果出现error: Failed build dependencies。。。的错误,执行
  yum-builddep kernel.spec (kernel.spec是~/rpmbuild/SPECS目录下的文件)
  or
  yum-builddep kernel...(rpm文件),之前一步说明的检查相关的依赖性

  成功能源代码会在~/rpmbuild/BUILD目录里

  以上内容及问题参考了以下文章:
  http://blog.csdn.net/derryzhang/article/details/6003122
  http://stackoverflow.com/questions/13227162/automatically-install-build-dependencies-prior-to-building-an-rpm-package

4:下载安装的源代码里的Makefile里的版本和自己使用的主次版本一致,但发行商一般会加一个EXTRAVERSION来标识,

  所以需要在源码的Makefile里定义EXTRAVERSION与自己用的发行  的一致的(uname -r).

Linux驱动开发环境-Kernel源码安装的更多相关文章

  1. s3c6410 Linux 驱动开发环境搭建

    s3c6410 Linux 驱动开发环境搭建 -- 既然你是做Linux开发的,你还用虚拟机? 非常多人都在win下做开发,于是SD_writer.exe之类的烧写工具"大行其道" ...

  2. linux下MySQL 5.6源码安装

    linux下MySQL 5.6源码安装 1.下载:当前mysql版本到了5.6.20 http://dev.mysql.com/downloads/mysql 选择Source Code 2.必要软件 ...

  3. 在ConoHa上Centos7环境下源码安装部署LNMP

    本文记录了从源码,在Centos 7上手动部署LNMP环境的过程,为了方便以后对nginx和mariadb进行升级,这里采用yum的方式进行安装. 1.建立运行网站和数据库的用户和组 groupadd ...

  4. CentOS7.3环境下源码安装httpd

    CentOS7.3环境下源码安装httpd 本文在CentOS7.3下,源码安装apache服务httpd2.4. 1.下载好源码安装包 [root@localhost ~]#ll total 625 ...

  5. LNAMP服务器环境(源码安装)

    在安装前先看下它们安装时所需要的依赖库:http://www.cnblogs.com/fps2tao/p/7699448.html 1.nginx源码安装 下载:http://nginx.org/en ...

  6. Linux 系统安装配置PHP服务(源码安装)

    简介: PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要 ...

  7. 【程序包管理】Linux软件管理之src源码安装编译

    在很多时候我们需要自定义软件的特性,这时就需要用到源码安装.那么,网上有很多编译源码的工具,那么,我们怎么知道别人使用的是什么工具呢.其实我也不知道(*^▽^*). 那么本篇博客主要是写C代码的源码安 ...

  8. linux应用之nginx的源码安装及配置(centos)

    1.准备工作选首先安装这几个软件:GCC,PCRE(Perl Compatible Regular Expression),zlib,OpenSSL.Nginx是C写的,需要用GCC编译:Nginx的 ...

  9. linux kernel 源码安装

    有时我们在安装系统后,发现没有安装当前系统的内核源码在/usr/src/kernels目录下,其实我们是少安装了一个rpm包: 当你配置好yum源后: yum install kernel-devel ...

  10. Linux环境下源码安装Apache2.2.25

    操作环境:RedHat Enterprise Linux 5.6 一.安装准备 安装Apache一般依赖3个组件:apr.apr-util.pcre. 确保这三个组件已经安装. [root@bigsr ...

随机推荐

  1. Node.js+Vue.js开发王者荣耀手机端官网

    一.项目初始 1.工具安装和环境搭建 node.js.npm.mongodb 编辑器:VScode 2.项目初始化 项目分为三个部分,分别是移动端界面.后台管理界面和node.js开发的整体的服务端 ...

  2. 版本不兼容(NoSuchMethodError: com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank)

    "C:\Program Files\Java\jdk1.8.0_221\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspri ...

  3. K8S多节点部署

    一.k8s多节点部署(接上篇博客) 1.环境准备 服务器 ip 组件 k8s集群master01 192.168.142.3 kube-apiserver.kube-controller-manage ...

  4. Windows快捷键学习

    Ctrl组合 Ctrl+C 复制 Ctrl+X 剪切 Ctrl+V 粘贴 Ctrl+A 全选 Ctrl+Z 撤消 Ctrl+S 保存 Shift组合 Shift+Delete 永久删除 Shift+A ...

  5. python之pyqt5-第一个pyqt5程序-图像压缩工具(2.0版本)-小记

    (如想转载,请联系博主或贴上本博地址) 此篇为上一篇pyqt5图像压缩小工具改良版.因为比较简单,下面直接贴上代码. 效果图: # -*- coding: utf-8 -*- # Form imple ...

  6. linux虚拟机设置网络显示NetworkManager need to be running

    问题描述:在设置一台centOS7虚拟机的网络时出现: 解决方法: 命令行重启NetworkManager systemctl restart NetworkManager 刷新一次就好了

  7. 量子图形加密算法的MATLAB代码实现

    一.概述 目前主流的量子图形加密算法有量子像素编码算法(Quantum Image Pixel Encoding,QIPE).量子像素置乱算法(Quantum Image Pixel Scrambli ...

  8. Codeforces Round #648 (Div. 2) A~F题解

    开始补cf了,还是记录一下,加深思路,打的应该都是div2.题面不截图了,直接说题意,思路,代码. A 题意:给一个01矩阵,两个人轮流填格子,仅当第i行,第j列全为0时才能填,不能填的人输,问谁赢? ...

  9. Netty 高性能之零拷贝

    更多内容,前往个人博客 零拷贝是指避免在用户态(User-space)与内核态(Kernel-space)之间来回拷贝数据的技术. 一.传统 IO 传统 IO(InputStream/OutputSt ...

  10. JVM——锁

    对象头[每个对象都具有对象头] Mark:对象头的标记(32位),描述对象的 hash.锁信息.垃圾回收标记.年龄:内容包括:①.指向锁记录的指针:②.指向 monitor 的指针:③.GC 标记:④ ...