LDD读书笔记第十一章-内核的数据类型

Linux数据类型

Linux内核C语言数据类型大小
  Arch     char     short     int     long     ptr     long-long     u8     u16    u32    u64 
i386 1 2 4 4 4 8 1 2 4 8
alpha 1 2 4 8 8 8 1 2 4 8
armv41 1 2 4 4 4 8 1 2 4 8
ia64 1 2 4 8 8 8 1 2 4 8
m86k 1 2 4 4 4 8 1 2 4 8
mips 1 2 4 4 4 8 1 2 4 8
ppc 1 2 4 4 4 8 1 2 4 8
sparc 1 2 4 4 4 8 1 2 4 8
sparc64 1 2 4 4 4 8 1 2 4 8
x86_64 1 2 4 8 8 8 1 2 4 8

需要注意的是sparc64架构运行的是32位用户空间。但是在内核空间是64位的。
在当前的所有平台上指针和long型的大小总相同
u8等固定大小的值有其有符号版本以s代替u如:s8
如果需要在用户空间使用固定大小的话使用双下划线版本如__u8
固定大小的类型是linux特有的 如果考虑向其他unix变种移植应使用C99标准类型变量如:uint8_t
[阅读全文] »

LDD读书笔记第九章-与硬件通信

I/O端口和I/O内存

i/o寄存器和常规内存

为了防止边界效应的干扰,驱动程序必须确保不使用高速缓存,并且在访问寄存器时不发生读或写指令的从新排序。
高速缓存:把底层硬件配置成在访问IO区域时禁止硬件缓存。
从新排序:使用内存屏障
[阅读全文] »

LDD读书笔记第二章-构造和运行模块

模块的编译

编译模块时使用GNU make的扩展语法。

关于GNU make 扩展语法请看:http://lsec.cc.ac.cn/~xmwu/myfile/gnu_make.htm

obj-m  := <模块名>.o           假如要生成mymod.ko则命令为

1
obj-m := mymod.o

mymod.o 默认从mymod.c生成

<模块名>-objs := file1.o file2.o

如果要生成 mymod2.ko 并且 需要 f1.c和f2.c两个源文件。
则命令为

[阅读全文] »

LDD读书笔记第一章-设备驱动程序简介

第一章介绍性的东西。

没有什么知识点。

上传ldd3(linux device drivers 3)的全部配套源码

Linux Device Drivers, Third Edition Source Code

最近在读的书-Linux内核相关

在学习linux内核相关的东西。

购得两本linux内核相关的经典书籍。

Linux设备驱动程序(第三版)

ldd

Linux Device Drivers,3rd Edition

深入理解Linux内核(第三版)

Understanding the Linux Kernel

[阅读全文] »

Page 2 of 2«12