之前学习的编写驱动程序,都是开发板上的驱动程序,能否把在开发板上的操作放到Ubuntu系统上呢。答案当然是可以。网上搜索了一下,大致步骤为构建内核树,编写驱动程序。下面为构建内核树的步骤:
1、uname -r 得到当前系统使用的内核版本
2、sudo apt-get install linux-source-linux-source-4.15.0
3、tar -jxvf linux-source-4.15.0.tar.bz2
4、make oldconfig
5、make
后来发现可以直接使用Ubuntu构建好的内核,就是操作系统内正在运行的内核,只要把驱动程序的Makefile中需要的内核文件路径填入/lib/modules/$(shell uname -r)/build即可。后面的步骤跟写开发板上的驱动时一样的。编译出ko文件后,可以直接
sudo insmod。查看打印信息则需要去/var/log/syslog文件中。
最后在编译驱动的时候遇到了一个大坑,执行make之后一直报下面的错误
make: make: Command not found
Makefile:8: recipe for target 'all' failed
make: *** [all] Error 127
咋一看像是没安装make的原因,但是之前明明用make编译过内核了,那个时候是好好的啊。后来发现是因为写Makefile的时候定义内核文件的变量时,为了省事把变量名定义为PATH,跟环境变量PATH冲突了,覆盖掉了环境变量,导致找不到make。所以偷懒是要付出代价的。