linux设备驱动程序_hello word 模块编译各种问题集锦
在看楼经典书籍《linux设备驱动程序》后,第一个程序就是编写一个hello word 模块。
原以为非常easy,真正弄起来,发现问题不少啊。前两天编过一次,因为没有记录,今天看的时候又忘了,所以无论多晚。都得记录一下。
1、首先说明一下我的系统环境:ubuntu 14.04,内核是3.13.0-29-generic
2、在我电脑里装了git版本号控制器。我clone了一个linux内核库在我的电脑上,所以我就能够随意的切换到随意的分支上去。最初是用的2.6.3,后来编译的时候遇到各种问题。google了一下,现将各位大神的解决方式链接一下:http://blog.csdn.net/sabalol/article/details/2076610
hello word代码:
1 #include <linux/init.h>
2 #include <linux/module.h>
3
4 MODULE_LICENSE("Dual BSD/GPL");
5
6 static int hello_init(void)
7 {
8 printk(KERN_ALERT "Hello World enter\n");
9 return 0;
10 }
11
12 static void hello_exit(void)
13 {
14 printk(KERN_ALERT "Hello World exit\n");
15 }
16
17 module_init(hello_init);
18 module_exit(hello_exit);
19
20 MODULE_AUTHOR("zhangjun");
21 MODULE_DESCRIPTION("A simple Hello World Module");
22 MODULE_ALIAS("a simple module");
Makefile代码:
1 obj-m := hello.o
2 KERNEL :=/lib/modules/3.13.0-29-generic/build
3 PWD :=$(shell pwd)
4 modules:
5 $(MAKE) -C $(KERNEL) M=$(PWD) modules
6
7 .PHONEY:clean
8 clean:
9 rm -f *.o *.ko
说明:请将KERNEL后面的“/lib/modules/3.13.0-29-generic/build” 改成与自己系统相匹配的路径
3、刚開始我没实用系而统自带的那个路径“/lib/modules/3.13.0-29-generic/build ”,而是自己的源码,它可以编译,可是载载入模块的时候会报insmod: error inserting 'hello.ko': Invalid module format这个错误。查的时候是说编译源码版本号和系统版本号不一样。后来我改成一样的。还是不正确。最后看到了这篇文章,可以说是解救楼我os.51cto.com/art/201108/287684.htm
,在此感谢这位仁兄。
然后将编译的源码路径改成系统自带的路径后,就大工告成了。
4、在ubuntu 终端载入的时候发现没有输出,,这让我非常郁闷。事实上这是由于桌面环境下的终端是模拟终端。仅仅能在字符终端以下才干显示输出。
假设在模拟终端下的话,它是把信息输出到“/var/log/kern.log“了(ps:ubuntu系统是这个文件夹。其它系统可能是/var/log/message“)。
5、我们要载入的时候可以看到输出就须要切换到字符界面下去。怎么切换?在ubuntu以下是crtl+alt+f2 或者f3。f4,f5,f6都行。
(ps:记得切换回桌面环境是alt+F7)
6、经常使用命令:查看自己内核版本号 uname -a
參考:blog.csdn.net/wwyyxx26/article/details/6325843
再给各位程序员点好东西:https://github.com/txthinking/google-hosts相信喜欢编程的你都喜欢上google。。fuckGWF。
linux设备驱动程序_hello word 模块编译各种问题集锦的更多相关文章
- Linux设备驱动程序学习----3.模块的编译和装载
模块的编译和装载 更多内容请参考Linux设备驱动程序学习----目录 1. 设置测试系统 第1步,要先从kernel.org的镜像网站上获取一个主线内核,并安装到自己的系统中,因为学习驱动程序的编写 ...
- linux设备驱动程序该添加哪些头文件以及驱动常用头文件介绍(转)
原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是 ...
- Linux设备驱动程序 第三版 读书笔记(一)
Linux设备驱动程序 第三版 读书笔记(一) Bob Zhang 2017.08.25 编写基本的Hello World模块 #include <linux/init.h> #inclu ...
- Linux设备驱动程序学习之分配内存
内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题. 我已经在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间. kmalloc 函数内幕 ...
- Linux设备驱动程序学习----1.设备驱动程序简介
设备驱动程序简介 更多内容请参考Linux设备驱动程序学习----目录 1. 简介 Linux系统的优点是,系统内部实现细节对所有人都是公开的.Linux内核由大量复杂的代码组成,设备驱动程序可以 ...
- linux设备驱动程序--在用户空间注册文件接口
linux字符设备驱动程序--创建设备节点 基于4.14内核,运行在beagleBone green 在上一讲中,我们写了第一个linux设备驱动程序--hello_world,在驱动程序中,我们什么 ...
- linux设备驱动程序--gpio控制
gpio驱动程序 上一章节linux设备驱动程序--创建设备节点章节主要介绍了linux字符设备驱动程序的框架,从这一章节开始我们讲解各种外设的控制,包括gpio,i2c,dma等等,既然是外设,那就 ...
- linux设备驱动程序--hello-world
linux字符设备驱动程序--hello_world 基于4.14内核, beagleBone green平台 PC端的设备驱动程序 有过电脑使用经验的人都知道,当我们将外部硬件设备比如鼠标键盘插入到 ...
- linux设备驱动程序-i2c(1):i2c总线的添加与实现
linux设备驱动程序-i2c(1):i2c总线的添加与实现 (基于4.14内核版本) 在上一章节linux设备驱动程序-i2c(0)-i2c设备驱动源码实现中,我们演示了i2c设备驱动程序的源码实现 ...
随机推荐
- 程序员必知的LinuxShell命令
程序员必知的LinuxShell命令 grep (Globle Regular Expression Print全局正则表达式) 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的 ...
- opencv3+python+pycharm报错问题(cmd命令正常)
2018-03-0223:58:59 首先在你已成功安装python的情况下运行cmd命令,下载安装opencv插件 如果在命令行可以使用 import cv2 但是在IDE上面只输入import c ...
- 转载pcb设计详细版
http://www.51hei.com/bbs/dpj-52438-1.html 详细的altium designer制作PCB步骤,按照步骤一步步的学习就会自己制作PCB模型 目 录 实验三 层 ...
- offset 后 指针数组转换
AcDbObjectId pidoffset; AcDbPolyline *plineOffset; AcDbVoidPtrArray ptarr=NULL; pline->getOffsetC ...
- 用sed写配置IP脚本参数
#!/bin/bash#配置ip地址参数脚本NET=/etc/sysconfig/network-scripts/ifcfg-ens33if grep -E "BOOTPROTO=dhcp& ...
- 小程序wx:key = “{{*this}}”报错
解决方案:改为 wx:key = "*this"
- 2019西安多校联训 Day2
试题链接:http://www.accoders.com/contest.php?cid=1894 考试密码请私信; T1 残忍WA 0,明明就是一道非常菜的字符串QAQ 思路:一共找四种东西,A ...
- 洛谷——P1404 平均数
P1404 平均数 题目描述 给一个长度为n的数列,我们需要找出该数列的一个子串,使得子串平均数最大化,并且子串长度>=m. 前缀和+二分答案 #include<iostream> ...
- 洛谷——P2827 蚯蚓
P2827 蚯蚓 题目描述 本题中,我们将用符号 \lfloor c \rfloor⌊c⌋ 表示对 cc 向下取整,例如:\lfloor 3.0 \rfloor = \lfloor 3.1 \rflo ...
- (C/C++学习)23.C++中指针的长度
引言:先看下面一个程序会打印出什么? #include<iostream> using namespace std; int main() { int a = 2; int *p = &a ...