如何自学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; //注意这里不能初始化