linux驱动开发中相关的问题
source link: https://titron.github.io/2023/06/08/linux_driver_dev_memo/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
linux驱动开发中相关的问题
-
输出hello
在.c中实现module_init和module_exit这两个函数,然后在module_init的函数里加个printk,输出个hello world。
把.c编译成.ko,然后insmod加载驱动,看到有打印,就算成功了。
- 设备树相关
加载dtb和.ko驱动,看到有打印,又成功了。心想,设备树应该就是这样吧。
- 系统启动前加载
要把一个.ko驱动在系统启动完成前就加载,这时才知道原来可以把命令放到/etc/init.d/rcS里。
作为驱动工程师,可以不用把文件系统了解的太深,但起码要知道inittab、rcS、passwd和shadow这几个文件的作用,还有就是前面说的C库。
rcS是文件系统启动时要执行的一些命令,inittab、passwd和shadow主要是修改系统登录时的用户名和密码,包括设置免密登录等等。
通常把文件系统提供给客户前,都会把用户名改为root,密码改为自己公司的名字,这时就会用到这几个文件。
- 驱动编进内核
Linux内核源码中每个目录下都有一个Makefile,我以为改个Makefile就行了。
但一运行,驱动没生效。后来才知道,原来还要修改Kconfig。
把驱动编进内核,其实正确的做法应该是通过menconfig菜单能够配置这个驱动是否编译,即修改Kconfig。
Makefile和Kconfig都修改了,驱动还是没生效?
这时就要看.o文件是否编译出来了,如果编译出来了。进一步看这个驱动的初始化级别,看是module_init、arch_initcall还是其他的级别。
然后加打印,把内核initcall的等级打印出来,看内核是否已经跑了该等级的初始化。如果已经跑到了,再把该等级的initcall执行函数的地址打印出来,然后反汇编vmlinux,看是否已经执行了新加驱动的probe函数。
- 手动修改defconfig配置引发的问题
编译内核时,通常都会用厂商提供的一个默认配置文件,例如make xxx_defconfig。
但是,如果我们想这个配置文件中加一个自己的宏,例如CONFIG_XXX=y,然后在代码中判断#ifdef CONFIG_XXX,你会发现并没有生效,并且原来写的CONFIG_XXX=y也没了。
这是很多新手改defconfig都会遇到的问题,其实是没有搞懂如何正确修改defconfig文件。
在defconfig中定义了CONFIG_XXX=y后,还要在Kconfig文件中添加一个config XXX的配置才会生效。
另外,如何某个配置选项存在依赖关系,但依赖的配置选项没打开,也会出现这种不生效的情况。
所以,还是建议通过menconfig菜单进行配置,除非真的弄清楚了这些关系,才能去手动修改defconfig。
- 源码阅读/跟踪问题
虽然有一些比较有用的内核调试技巧,但真正常用的,还是加打印跟踪,其它调试技巧归根到底还是辅助性的,很多情况下还是靠加打印分析问题。
跟踪一些函数传参过程,关注是否正确使用、是否正确传参问题,因为最终解决问题可能只是一个很简单的操作。
- 需要学会多少个驱动才行?
会多少驱动,这其实是一个进阶的过程。没有说一定要会多少个,但随着工作经验的增长,自身所掌握的驱动也会越来越多,承担的责任也越大。
Recommend
-
89
最近我也是经历过面试别人和去面试的人了,总结几个常被提及的面试问题,做一下解答和备忘。JavaScript 中 this 是如何工作的 ?先来看看这个题目:var x = 0; var foo = { x:1, bar:{ x:2, baz: function () {...
-
98
上一篇我们讲到了,在前端面试的时候常被问到的函数及函数作用域的问题。今天这篇我们讲js的一个比较重要的甚至在编程的世界都很重要的问题 面向对象 。在JavaScript中一切都是对象吗?“一切皆对象!” 大家都对此深信不疑。其实不然,这里面带有很多的语言陷阱,
-
46
static static分两种情况,修饰局部变量和全局变量。 我们首先要搞清楚生命周期和作用域的概念。 生命周期:这个变量能存活多久,它所占用的内存什么时候分配,什么时候收回。
-
67
-
11
linux下C语言开发16,考虑问题要面面俱到 发表于 2019-01-07 18:01:16...
-
8
Addressable编辑器相关开发问题 作者:admin 时间:4月7日 浏览:233 次 分类:
-
2
V2EX › Linux V 友能不能推荐一本讲设备管理、驱动开发相关的书? kyrre · 1 小时 21 分钟前 ·...
-
4
同驱动编译相关的三类文件:Makefile、Config和Kconfig 原创 WOT技术大会 ...
-
6
全志V3S嵌入式驱动开发(屏幕花屏问题的解决)
-
9
全志F1C200S嵌入式驱动开发(linux移植)
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK