随笔分类 - 重拾linux驱动
重新开始9年前被中断的学习
摘要:在04-最简单的字符设备驱动这篇文章中介绍了一个简单的字符设备驱动,包含了4个基本系统调用:open、close、read、write。其中read、write可以在应用空间和内核空间交换数据。但是某些操作不太适合他们来实现。比如: 清空kBuf 设置kBuf的操作行为 读取kBuf的属性,比如里面
阅读全文
摘要:一、设备驱动分类 linux设备驱动一般分为3类,字符设备,块设备,网络设备。前两个在/dev目录下有对应的设备节点,网络设备比较特殊,没有。通过ls -l /dev/xx可以看出设备类型: thammer@test:~$ ls -l /dev/nvme0n1 brw-rw 1 root disk
阅读全文
摘要:为什么? 有些开发测试工作在实际的硬件板子上反而不方便,比如切换CPU属性,比如设置单核或者多核来验证某些问题,或者手头暂时没有板子的情况下,用虚拟机搭建linux驱动开发测试环境是一个非常不错的替代方案。并且这样做免去了交叉编译,上传文件的繁琐步骤,直接本机编辑代码,编译代码,运行测试。 搭建步骤
阅读全文
摘要:什么是内核符号? 内核符号表就是内核中 “名字 → 信息(地址、类型、可见性)” 的映射表。名字通常是内核的函数名或全局变量名,符号表让内核本身与可加载模块(.ko)相互找到并链接这些名字。而表项的名字就是内核符号。 内核符号表存在于哪里? 构建时:vmlinux(未压缩的内核镜像)包含完整符号信息
阅读全文
摘要:通过repo把imx6ull的sdk拉下来,主要包含kernel,toolchain,uboot,buildroot几个东西。 环境配置 在~/.bashrc中加入一下内容: export PATH=$PATH:/mnt/2Thdd/wds/100ask_imx6ull-sdk/ToolChain/
阅读全文
摘要:内核模块在insmod时允许传递参数,来实现更灵活的需求。例如:在调试内核模块时,可能需要控制该模块的日志输出等级,来方便分析模块的问题。普通的做法是代码中有一个变量控制日志等级,修改编译后加载模块。 但是如果通过传递参数的方式来修改日志等级,就无需修改和重新编译了。 linux内核通过宏modul
阅读全文
摘要:本文针对嵌入式设备 0.准备工作 安装并配置好交叉编译工具链 交叉编译linux内核,为编译内核模块提供编译环境 1.内核模块的入口和出口 linux内核提供了一对注册宏module_init(initfn)和module_exit(exitfn),它俩用于向内核注入内核模块的入口函数和出口函数。分
阅读全文

浙公网安备 33010602011771号