Linux内核入门(二)Hello World 驱动程序


前言

注意:建议在虚拟机上另外安装一个 linux 操作系统进行开发与调试,本文旨在技术分享与探讨,并不承担任何风险。
本文主要探讨如何在 linux下编写一个Hello World入门级别的驱动程序以及演示驱动程序的加载、卸载以及调试的方法与步骤,由于笔者现在手头上没有开发板因此先暂时在ubuntu 22.04 server上进行演示。


一、准备工作

1.1 安装内核头文件

sudo apt-get update
sudo apt-get install build-essential linux-headers-$(uname -r)

1.2 编写驱动程序代码

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

#define HELLO_WORLD_DEBUG
#undef PDEBUG             /* undef it, just in case */

#ifdef HELLO_WORLD_DEBUG
    #ifdef __KERNEL__
     /* This one if debugging is on, and kernel space */
        #define PDEBUG(level, fmt, args...) printk(level fmt, ## args)
    #else
     /* This one for user space */
        #define PDEBUG(fmt, args...) fprintf(stderr, fmt, ## args)
    #endif
#else
    #define PDEBUG(level, fmt, args...) /* not debugging: nothing */
#endif

static int number = 10;

static int __init hello_init(void) {
   
   
    //printk(KERN_WARNING "Hello, world!\n");
    PDEBUG(KERN_WARNING, "number:%d, Hello, world !\n", number);
    number--;
    return 0;
}

static void __exit hello_exit(void) {
   
   
    //printk(KERN_WARNING "Goodbye, world!\n");
    PDEBUG(KERN_WARNING, "number:%d, Goodbye, world !\n", number);
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("JeffChong");
MODULE_DESCRIPTION("A simple Hello World driver");
MODULE_VERSION("1.0");

1.3 编写Makefile

obj-m += hello_world.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值