linux文件驱动框架(linux文件驱动)-编程之家

如何自学linux驱动开发,做驱动开发需要哪些方面的知识?

做嵌入式应用的话一般的编程就可以了。那么嵌入式驱动开发与内核开发的话就需要学习多个方面的知识。我就把这方面的要求给你交流一下:(一家之言啊,自己多年从事嵌入式开发的一点感悟)嵌入式驱动开发需要了解的知识大概有以下几类:

1 嵌入式操作系统驱动框架

每一个操作系统都有自己的构架,应该了解驱动在整个系统中的具体位置与构建驱动程序的主要事项2 总线知识,比如PCI、USB总线。

3 芯片知识。

驱动其实就是对设备上一些寄存器的配置、CPU与设备本身的通讯以及对不同命令的处理4 要做好驱动,必须对所使用的CPU体系结构有一个比较深刻的认识5 C++基本用不上,主要是C和汇编。

6 做驱动最好要懂内核调试(比如说linux)

linux加载驱动的两种makefile文件

二 Makefile文件有两种写法:

一种是:

# Add your debugging flag (or not) to CFLAGS

ifneq ($(KERNELRELEASE),)

obj-m := boot.o

else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

default:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif

另外一种是:

# Add your debugging flag (or not) to CFLAGS

ifneq ($(KERNELRELEASE),)

obj-m := boot.o

else

KERNELDIR ?= /usr/src/linux-headers-2.6.38-8-generic

PWD := $(shell pwd)

default:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif

比较两者可以发现,该两个Makefi二 Makefile文件有两种写法:

一种是:

# Add your debugging flag (or not) to CFLAGS

ifneq ($(KERNELRELEASE),)

obj-m := boot.o

else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

default:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif

另外一种是:

# Add your debugging flag (or not) to CFLAGS

ifneq ($(KERNELRELEASE),)

obj-m := boot.o

else

KERNELDIR ?= /usr/src/linux-headers-2.6.38-8-generic

PWD := $(shell pwd)

default:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif

比较两者可以发现,该两个Makefi二 Makefile文件有两种写法:

一种是:

# Add your debugging flag (or not) to CFLAGS

ifneq ($(KERNELRELEASE),)

obj-m := boot.o

else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

default:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif

另外一种是:

# Add your debugging flag (or not) to CFLAGS

ifneq ($(KERNELRELEASE),)

obj-m := boot.o

else

KERNELDIR ?= /usr/src/linux-headers-2.6.38-8-generic

PWD := $(shell pwd)

default:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif

比较两者可以发现,该两个Makefile的唯一差别是KERNELDIR的不同,

le的唯一差别是KERNELDIR的不同,

le的唯一差别是KERNELDIR的不同,

如何实现Linux下的U盘驱动?

插入U盘。

输入 fdisk -l /dev/sda 查看输出结果

看了上面的输出就知道U盘所在的设备了,/dev/sdb1,接着便是挂载了,假设将U盘挂载到/mnt/usb目录中,就是

mount -t msdos /dev/sdb1 /mnt/usb

如果是fat16就使用下面的命令

mount -t msdos /dev/sdb1 /mnt/usb

如果是fat32

mount -t vfat /dev/sdb1 /mnt/usb

如果是ext2格式,就用命令:

mount -t ext2 /dev/sda1 /mnt/usb

4.打开/mnt/usb 就可以看到U盘里的东西了!

cd /mnt/usb

5. 卸载命令则为:umount /mnt/usb。

需要注意的是,当执行完这个命令后,U盘上的指示灯可能仍然亮着,这不是卸载失败。Linux对U盘的管理是内核模块式,只要usb设备的内核模块没有移除,卸载完后指示灯还是应该发亮。

linux驱动程序可以通过哪两种方式集成到内核?

在main.c文件定义为全局变量; int a = 0; 在urat.c使用extern申明引用外部变量 extern int a; //注意这里不能初始化