Linux驱动开发学习-02.第一个模块HelloWorld

02.第一个模块HelloWorld

2.1 内核划分

2.1.1 根据系统结构划分(5)

  • 进程管理:内核负责进程创建与销毁,处理输入输出,进程间通信,共享CPU控制等
  • 内存管理:内核为每个进程建立虚拟地址空间,内核与内存管理系统交互
  • 文件系统:内核在非结构化的硬件上建立了结构化文件系统
  • 设备控制:除处理器、内存和少见的实体外,其他任何设备控制操作由设备驱动完成
  • 网络:报文是异步事件,在某一进程接手前必须被收集、识别和分发;系统负责在程序和网络间递送报文;所有路由和地址解析问题都在内核中实现
    在这里插入图片描述

2.1.2 根据模块划分

Linux优良特性之一:在系统正在运行时,仍然可以增加或去除内核的部分功能;每块可以在运行时添加到内核的代码即为一个模块;模块并不是一个完成的可执行文件,它需要通过insmod(rmmod)动态链接(移除)到内核中

在这里插入图片描述

2.1.3 设备分类(3)

  • 字符设备:可当做字节流存取的设备(如同一个文件),驱动至少要实现openclosereadwrite系统调用;文本控制台/dev/console和串口/dev/ttyS*是典型实例;字符设备通过文件系统结点存取,如/dev/tty1;与普通文件区别在于,字符设备只能顺序存取
  • 块设备:同字符设备,块设备通过/dev/下的文件系统结点存取;块设备驻有文件系统;大部分Unix系统块设备仅能传送2^n字节的整块,而Linux可传送任意字节;块和字符设备的区别仅仅在于内核在内部管理数据的方式上,以及软件接口上
  • 网络接口:网络接口负责发送和接收报文;非面向流的设备;Unix提供的对接口的存取方式仍然是分配一个名字(如eth*)但这个名字在文件系统中并没有对应入口

除设备驱动外,不论硬件和软件,在内核中都是模块化的(如文件系统)

2. HelloWorld模块

2.2.1 源文件

  • 创建hello.c
#include <linux/init.h>   
#include <linux/module.h>  

MODULE_LICENSE("Dual BSD/GPL");//告知内核自由许可证   

static int hello_init(void)   
{
      
    printk(KERN_ALERT "Hello, world\n");//printk内核打印,KERN_ALERT消息优先级  
    return 0;   
}   
static void hello_exit(void
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值