Linux驱动第一课--helloworld

注:加粗的是需要输入的命令,蓝色的是输入命令后对应的显示内容

第一步:编译内核树

               1、查看内核版本及源码

                     changyijia@changyijia-Lenovo-Z50-70:~$uname -r

                    3.13.0-77-generic     //我的是这个版本的,下面这个都替换成自己版本的哈

                     接着看下有没有下载好的源码                    

                     changyijia@changyijia-Lenovo-Z50-70:~$cd /usr/src

                     changyijia@changyijia-Lenovo-Z50-70:/usr/src$ls

                    linux-4.3                        linux-headers-3.13.0-68
                     linux-headers-3.13.0-44                           linux-headers-3.13.0-77
                     linux-headers-3.13.0-44-generic            linux-headers-3.13.0-77-generic
                     linux-headers-3.13.0-45         
                     linux-headers-3.13.0-45-generic

                    发现并没有我们需要的linux-source-3.13.0,就需要下载内核源码,有的话就不用了

              2、下载内核源码

                     首先查看目前可下载的我们这个版本的源码

                     changyijia@changyijia-Lenovo-Z50-70:/usr/src$apt-cache  search  linux-source
                     linux-source - Linux kernel source with Ubuntu patches
                     linux-source-3.13.0 - Linux kernel source for version 3.13.0 with Ubuntu patche
s

                     changyijia@changyijia-Lenovo-Z50-70:/usr/src$sudo apt-get install linux-source-3.13.0

               changyijia@changyijia-Lenovo-Z50-70:/usr/src$ ls

               linux-4.3                        linux-headers-3.13.0-68
                     linux-headers-3.13.0-44                           linux-headers-3.13.0-77
                     linux-headers-3.13.0-44-generic            linux-headers-3.13.0-77-generic
                     linux-headers-3.13.0-45                           linux-source-3.13.0.tar.bz2
                     linux-headers-3.13.0-45-generic

               发现出现了linux-source-3.13.0.tar.bz2,说明下载成功

                     changyijia@changyijia-Lenovo-Z50-70:/usr/src$ sudo tar jxvf linux-source-3.13.0.tar.bz2

               changyijia@changyijia-Lenovo-Z50-70:/usr/src$ cd ./linux-source-3.13.0

               changyijia@changyijia-Lenovo-Z50-70:/usr/src/linux-source-3.13.0$ sudo make oldconfig  //按照配置原版的方法进行配置

                     changyijia@changyijia-Lenovo-Z50-70:/usr/src/linux-source-3.13.0$ sudo make//开始编译,过程略长,去睡一觉吧

                     changyijia@changyijia-Lenovo-Z50-70:/usr/src/linux-source-3.13.0$ ls //这一步会发现显示一个vmlinux的文件,说明成功

                     changyijia@changyijia-Lenovo-Z50-70:/usr/src/linux-source-3.13.0$ sudo make modules//编译模块

                     changyijia@changyijia-Lenovo-Z50-70:/usr/src/linux-source-3.13.0$ sudo make modules_install//安装模块

                     这一步结束后,内核就编译完成了,在/lib/modules下会生成一个新的目录

                     changyijia@changyijia-Lenovo-Z50-70:~$cd /lib/modules                  

                     changyijia@changyijia-Lenovo-Z50-70:/lib/modules$ls

               3.13.0-43-generic  3.13.0-45-generic  3.13.0-77-generic
                     3.13.0-44-generic  3.13.0-68-generic  3.13.11-ckt32

               我新生成的目录是3.13.11-ckt32,下面也替换成自己的哈

              3、编译及连接hello_world模块

                     changyijia@changyijia-Lenovo-Z50-70:/lib/modules~$cd

                     changyijia@changyijia-Lenovo-Z50-70:~$mkdir ./moduleTest //在主文件夹里新建了个文件夹moduleTest

                     接着新建两个文档,分别命名为hello.c和Makefile

                     hello.c:

<span style="font-family:Microsoft YaHei;font-size:12px;">#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
    printk(KERN_ALERT "Hello,world\n");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye,cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);
</span>
                   Makefile:
<span style="font-family:Microsoft YaHei;font-size:12px;">ifneq ($(KERNELRELEASE),)
	obj-m :=hello.o
else
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)
modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

clean:
	rm -rf *.o *~ .depend .* .</span>
                   changyijia@changyijia-Lenovo-Z50-70:~$ cd ./moduleTest

             changyijia@changyijia-Lenovo-Z50-70:~/moduleTest$ sudo make//编译模块

                   changyijia@changyijia-Lenovo-Z50-70:~/moduleTest$ sudo insmod ./hello.ko//插入模块,本来应该显示,结果啥都没有

               changyijia@changyijia-Lenovo-Z50-70:~/moduleTest$cat  /var/log/syslog  |grep  world //这一步可以查看系统日志,在这里应该有显示

                   Feb 23 00:37:05 changyijia-Lenovo-Z50-70 kernel: [89235.050838] Hello,world//出现这个说明成功了

                   changyijia@changyijia-Lenovo-Z50-70:~/moduleTest$ sudo rmmod ./hello.ko//卸载模块

                   changyijia@changyijia-Lenovo-Z50-70:~/moduleTest$cat  /var/log/syslog  |grep  world //再次查看系统日志,在这里应该有显示

                   Feb 23 00:37:05 changyijia-Lenovo-Z50-70 kernel: [89235.050838] Hello,world 

                   Feb 23 00:38:11 changyijia-Lenovo-Z50-70 kernel: [89300.556694] Goodbye,cruel world

ok,大功告成!!


                      
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值