一、在前面实验12的过程中在使用NFS进行挂载的步骤中要注意:
如果是挂载 Ubuntu18 系统及更高版本 的系统下的 nfs 共享目录,uboot 无法通过 nfs 启动 Ubuntu 系统内的共享目录。需要在 /etc/default/nfs-kernel-server 文件进行修改,改好了保存退出,然后重启一下 nfs 就可以了,或 者报错 Loading:*ww ERROR:File lookup fail 的也是按照下面的方法来解决。
按照上面的截图改完之后,保存退出,在执行以下指令重启nfs服务。
sudo service nfs-kernel-server restart
二、在完成实验12的基础上,接下来是字符驱动的开发:
首先在该模式下创建如下文件夹:
注意:我已创建!
在lib下创建modules
在modules下创建4.1.15文件夹
- 创建VSCode工程在Ubuntu中创建一个存放linux驱动的文件夹,我的目录如下:
2、在1_chrdevbase文件夹下创建.vscode工程,并且新建chrdexbase.c文件
创建c_cpp_properties,json文件,如下所示:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/home/itcast/linux/IMX6ULL/linux/linux-imx-rel_imx_4.1.15_2.1.0_ga/include", (此文件目录为个人虚拟机下的目录)
"/home/itcast/linux/IMX6ULL/linux/linux-imx-rel_imx_4.1.15_2.1.0_ga/arch/arm/include", (此文件目录为个人虚拟机下的目录)
"/home/itcast/linux/IMX6ULL/linux/linux-imx-rel_imx_4.1.15_2.1.0_ga/arch/arm/include/generated/"(此文件目录为个人虚拟机下的目录)
],
"defines": [],
"compilerPath": "/usr/bin/clang",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
注意:
如果本次实验自己使用的是正点原子出厂的源码的进行的编译,那么以下路径就使用自己的路径,如果是将开发板对应的源码进行修改的,那么就使用自己修改过的开发板对应的路径, 特别注意:在做驱动开发的时候,千万不能将此路径搞混淆了。以至于后面的实验会出现各种问题!
例如:就会出现如下问题:
- 接下来创建settings.json文件,如下所示:
4、编写.c文件:
5、接下来编写Makefile文件,如下所示:
注意:上边KERNELDIR为自己虚拟机中存放的文件位置
此时,应该在vscode中进行编译.c
make
敲完make命令之后,文件夹中应该会出现.ko文件等等文件。
6、接下来,将当前目录下的.ko文件复制到刚才新建的文件下,命令如下:
sudo cp chrdevbase.ko /home/itcast/linux/nfs/rootfs/lib/modules/4.1.15/ -f
注意:此文件目录是在自己虚拟机下nfs文件目录中新建的文件
接下来在CRT中进入到文件夹4.1.15下,输入如下命令加载 chrdevbase.ko 驱动文件:
modprobe chrdevbase.ko
如果出现如下所示的提示:
输入“depmod”命令以后会自动生成 modules.alias、dules.symbols 和 modules.dep 这三个文件
7、重新使用 modprobe 加载 chrdevbase.ko,
说明驱动加载成功!
三、注意:如果出现以下问题:
1、
2、如果出现以下问题:这个是led实验!需要在vscode中创建如1_chrdevbase文件下一样的.vscode文件。重新使用make编译即可。再将其sudo cp chrdevbase.ko /home/itcast/linux/nfs/rootfs/lib/modules/4.1.15/ -f
3、如果以上方法还行不通,试着将其Makefile文件下做以如下更改:
再次重复上一步即可。接下来再进行led实验就应该没有什么问题了。