linux device driver 第三版 - 1. hello world

0. 说明
因为书是第三版,需要linux 2.6的内核,所以用了centos-6.5

1. 安装 centos-6.5虚拟机
   下载centos-6.5的dvd镜像1, 然后安装在虚拟机里

2. 设置光盘安装源
   修改 /etc/yum.repos.d/CentOS-Media.repo 为如下内容:

1
2
3
4
5
6
7
8
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS_6.5_Final/       这个设置为实际的光盘mount目.
        file:///media/cdrom/
        file:///media/cdrecorder/
gpgcheck=0
enabled=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

** 将其它的 .repo文件删除或挪走。

3. 添加源码树

  下载centos-6.5源代码rpm文件: http://vault.centos.org/6.5/os/Source/SPackages/kernel-2.6.32-431.el6.src.rpm
 

1
2
3
# yum install -y gcc bison patchutils rpm-build redhat-rpm-config hmaccalc perl-ExtUtils-Embed pesign xmlto audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel ncurses-devel numactl-devel  python-devel zlib-devel
# useradd -s /sbin/nologin mockbuild
# rpm -ivh kernel-2.6.32-431.el6.src.rpm


  这样源代码就安装好了,放在/usr/src/kernels/2.6.32-431.el6.i686

4. hello模块的.c源文件 hello.c
  创建目录 /opt/driver/ch2, 创建文件hello.c

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <linux/init.h>
#include <linux/module.h>
 
MODULE_LICENSE("Dual BSD/GPL");
 
static int hello_init(void)
{
        printk(KERN_ALERT "Hello, LINUX DRIVER\n");
        return 0;
}
 
static void hello_exit(void)
{
        printk(KERN_ALERT "Goodbye, cruel world\n");
}
 
module_init(hello_init);
module_exit(hello_exit);

 
Makefile: 只有一行

1
obj-m := hello.o

 
5. 编译

  在/opt/driver/ch2目录里:

1
# make -C /usr/src/kernels/2.6.32-431.el6.i686 M=`pwd` modules


  其中 -C 表示会进入到 /usr/src/kernels/2.6.32-431.el6.i686目录里。
  编译成功,会生成 hello.ko,  2.6内核模块是.ko为扩展名

6. 运行

1
# insmod hello.ko

   运行后控制台无显示

1
2
3
4
5
# tail -n 20 /var/log/messages 可查看printk打印信息
...
Sep 19 22:18:13 centos6 yum[2793]: Installed: numactl-devel-2.0.7-8.el6.i686
Sep 19 22:49:30 centos6 kernel: Hello, LINUX DRIVER
Sep 19 22:49:54 centos6 kernel: Goodbye, cruel world

 7. 卸载

# rmmod hello

 

posted @   北极熊129  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示