字符设备驱动(一)

本文详细介绍Linux字符设备驱动的基础知识、开发环境搭建步骤及常用命令。包括如何安装开发工具、编译驱动程序、查看及操作模块等核心内容。适合初学者入门及进阶学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.字符设备驱动基础知识图解链接:

Linux 设备驱动之字符设备(一)
http://blog.chinaunix.net/uid-26833883-id-4369060.html
Linux 设备驱动之字符设备(二)
http://blog.chinaunix.net/uid-26833883-id-4369117.html
Linux 设备驱动之字符设备(三)
http://blog.chinaunix.net/uid-26833883-id-4371047.html
linux设备驱动程序之简单字符设备驱动
http://www.cnblogs.com/geneil/archive/2011/12/03/2272869.html
字符设备驱动模型
http://blog.youkuaiyun.com/coding__madman/article/details/51347290

2.Ubantu下驱动环境搭建及命令

1.开发本机使用的驱动程序
http://blog.csdn.net/bugonline/article/details/45822611

1.安装开发工具:
* apt-get install build-essential

2./home/linux_test/hello.c Makefile

3.编译:sudo make
编译成功之后会生成相应有ko文件,也就是我们想要的驱动了.

4.查看ko模块的信息 modinfo hello.ko

5.插入模块 sudo insmod ./hello.ko  查看模块sudo lsmod

6.卸载模块  rmmod hello

7.查看信息 cat /var/log/syslog |grep world
2.开发第三方使用的驱动程序
如果驱动不是为本机用的,则需要下载目标版本的源代码并编译
sudo rm -rf 文件名
1. 查看源内的内核源码类表
apt-cache search Linux-source

2. 下载安装内核源代码
sudo apt-get install linux-source-4.8.0

3.源码解压到/usr/src/  
sudo kxvf linux-source-4.8.0.tar.bz2

4.进入linux-source-(版本号)目录中执行下面几个命令:

* sudo make oldconfig 或 menuconfig
* sudo make prepare  
* sudo make scripts
* sudo make 
* sudo make modules

* sudo make modules_install 会安装到/lib/modules$  中

3. makefile 指向/lib/modules/中指定的路径。就可以编译了。


cat /proc/devices

lu@lu-vm:~/linux-test/mycdev$ ls -l /dev/memdev0
crw-r--r-- 1 root root 66, 0 422 14:18 /dev/memdev0



modinfo mem_dev.ko

 # ./app-mem


sudo mknod /dev/memdev c 245 0

sudo ls -l /dev/memdev

sudo chmod 666 /dev/memdev

然后就是编译,打开终端,进入目录
 sudo rm /dev/memdev
然后用gcc进行编译

gcc -Wall ./app-mem.c
gcc会显示编译过程中发现的问题于错误,若无错误出现则会编译成文件a.out

运行程序(a.out为编译生成的文件)
./a.out


dmesg |tail



cat /dev/mycdev


printk(KERN_INFO "The process is \"%s\" (pid %i)\n",


字符设备的读写
echo "nihao">/dev/dev_fifo0
cat /dev/dev_fifo0


 current->comm, current->pid);

cat /proc/kallsyms | grep saved_command_line

驱动有需求要从cmdline获取参数来配置。

init/main.c可以直接读取cmdline。一开始我直接想从main.c里直接EXPORT_SYMBOL(boot_command_line),编译的时候会有提示SECTION_MISMATCH的警告。

仔细分析查看是__init段不能EXPORT_SYMBOL.

后来参考fs/proc/cmdline.c代码。直接使用saved_comand_line即可。

obj-m := -DEXPORT_SYMTAB
KBUILD_EXTRA_SYMBOLS = /export_symbol_module_dir/Module.symvers


lu@lu-vm:/usr/src/linux-source-4.8.0$ nm vmlinux|grep command_line
ffffffff82032920 T boot_command_line
ffffffff8203f2e0 t command_line
ffffffff820fd030 b initcall_command_line
ffffffff820fd008 B saved_command_line
ffffffff820fd038 b static_command_line
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值