Linux驱动开发学习的一些必要步骤.

来源:互联网 发布:武汉人工智能创业公司 编辑:程序博客网 时间:2024/06/02 00:10

1. 学会写简单的makefile

2. 编一些应用程序,可以用makefile跑起来

3. 学会写驱动的makefile

4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world,insmod后应该能够通过dmesg看到输出。

5. 写一完整驱动, 加上read, write, ioctl, polling等各种函数的驱动实现。 在ioctl里完成从用户空间向内核空间传递结构体的实现。

6. 写一些block驱动, 加上read,write,ioctl,poll等各种函数实现。

7. 简单学习下内存管理, 这个是最难的,明白各种memory alloc的函数实现细节。这是Linux开发的基本功。

8. 学习锁机制的应用,这个不是最难的但是最容易犯错的,涉及到很多同步和并发的问题。

9. 看内核中实际应用的驱动代码。 你会发现最基本的你已经知道了, 大的框架都是一样的, 无非是read, write, ioctl等函数的实现, 但里面包含了很多很多细小的实现细节是之前不知道的。 这时候就要考虑到很多别的问题而不仅仅是基本功能的实现。

    推荐您看2.6.20中integrated的一个驱动kvm, 记得是在driver/lguest下,很好玩的, 就是Linux下的虚拟机驱动,代码不长,但功能强大。有能力的可以自己写一操作系统按照要求做成磁盘镜像加载到虚拟机中,然后客户机可以有自己的4G虚拟地址空间。

10. 看完驱动欢迎您进入Linux kernel学习中来。
    最简单的方法,跟着ldd(Linux devive driver)做一遍。

经过搜集和整理,我所建议的驱动KVM

1.关于KVM,大家可以参考一下官方网站:
http://www.linux-kvm.org/page/Main_Page

2.一个专家写的《探索 Linux 内核虚拟机》的文章
http://www.ibm.com/developerworks/cn/linux/l-linux-kvm/index.html

3.开始安装kvm整理如下:
-----内核的kvm可不开启
-----kqemu可不安装(模拟其它CPU的话自行决定)
-----从http://kvm.sf.net下载源代码
-----按http://kvm.qumranet.com/kvmwiki/HOWTO那样安装
-----装完只有一个qemu-system-x86_64,它可以以x86的cpu运行32位和64位的guest os

4.总结并注意几点:

1)modprobe kvm-intel 时,如果dmesg 报的是disabled by bios 就说明是bios有开关没开,要开这个开关,务必保证一次断电加电的硬复位过程(简单的说,就是开开关,关机,断电,卸电池,加电,开机),特别是在笔记本电脑上更要如此。

2)在我的gentoo上,不会自动建立kvm用户组,并且普通用户会碰到权限问题,我是将脚本写在local.start里(或自行改udev的rules),如下:
modprobe kvm-intel
chmod 666 /dev/kvm

3)关于acpi(高级配置和电源管理接口)感觉kvm不是很完善,推荐关闭(详细请查看http://kvm.qumranet.com/kvmwiki/Windows_ACPI_Workaround)它,命令行加 -no-acpi,目前碰到的问题是无法重启和关机(应该是qemu接到的cpu指令跟kvm的cpu未能完善交互导致的),正在调整中。。当然还有该死的鼠标问题(试过禁用sdl的gui换成VNC channel也不理想,屏幕上有二个鼠标)

4)不足的是,不可以使用kvm来模拟其它类型CPU,为此,我特别另外安装了一份qemu with kqemu,用来模拟其它类似CPU比如ARM/MIPS

用上kvm 果真名不虚传,速度才真正感觉到接近真机了,推荐支持VT的CPU都试下,但qemu使用GUI问题非常的头痛,鼠标的速度不对劲;关gui启用vnc还是有问题(2个指针);总之,最后还是放弃了(因为讨厌多session所以不考虑远程桌面),也许是我对SDL还不熟(估计有一堆环境变量可以解决?)。

5)客观总结:除了VMWARE,感觉其它虚拟机说起来都好听,好象都在做非常规突破,影响稳定性,guest 若是linux/BSD 强烈推荐kvm,若是windows则推荐vmware(可用免费的vmware player,配置虚拟机可装不注册的workstion版,唯一不爽的就是不是本地编译和vmware不支持的快照),这主要是因为一些windows 在kvm 下还存在一些问题。

0 0