字符设备驱动的加载与卸载前工作

2023-12-18 19:45:09

一.? 简介

本文继前面几篇文章的学习,前面学习编写字符设备驱动的框架,以及编译。

文章地址如下:

字符设备驱动模块加载与卸载-CSDN博客

字符设备驱动模块的编译-CSDN博客

本文来学习字符设备驱动的加载与卸载。

二.? 字符设备驱动的加载与卸载

1.? 驱动模块加载前的工作

(1)?? 实验中的开发板设置从SD卡启动,再在 SD卡中烧写入 uboot。

SD卡烧写入 u-boot.bin文件,这里 uboot源码使用之前 我在 NXP官方提供的 uboot源码基础上更改的,针对 Nand_Flash版开发板的源码(也就是正点原子第三期视频最后的编译的),烧写 uboot到 SD卡:

SD卡插入读卡器,读卡器插入 电脑 usb口,将其连接到 ubuntu系统下。找到 SD 卡在ubuntu下的设备名,即可以通过 SD卡插入前后对比,可以确认是哪个设备名:

wangtian@wangtian-virtual-machine:~$ ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0 12月 17 17:14 /dev/sda
brw-rw---- 1 root disk 8,  1 12月 17 17:14 /dev/sda1
brw-rw---- 1 root disk 8,  2 12月 17 17:14 /dev/sda2
brw-rw---- 1 root disk 8,  5 12月 17 17:14 /dev/sda5
brw-rw---- 1 root disk 8, 16 12月 18 15:05 /dev/sdb
brw-rw---- 1 root disk 8, 17 12月 18 15:05 /dev/sdb1

这里确认, /dev/sdb 为 我这里的 SD卡设备名。

进入之前更改编译过的 uboot源码,烧写 uboot到SD卡:

烧写完 SD卡后,将 SD卡插入开发板,开发板上的拨码开关拨到从 SD卡启动。

(2)? 开发板设置通过 tftp服务加载 zImage 与 .dtb设备树文件

uboot 通过 tftp 服务从 ubuntu里面获取内核镜像zImage和.dtb设备树文件。???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

具体方法是:设置环境变量 bootargs值

开发板上电后,马上按下 "Enter" 回车键进入开发板的 uboot命令模式,可以查看 bootargs与 bootcmd现在的值:

可以看出,目前的 bootargs与 bootcmd的值, bootargs值设置了 各个文件的分区大小。

bootcmd的值设置的是从 nand-Flash启动 zImage与 .dtb设备树文件的。所以,需要两个环境变量的值都需要重新设置。

设置 bootcmd环境变量的值:

我这里的 ubuntu系统下, tftp服务所设置的文件目录为:

wangtian@wangtian-virtual-machine:~/linux/tftp_file$ pwd
/home/wangtian/linux/tftp_file
wangtian@wangtian-virtual-machine:~/linux/tftp_file$ ls 
imx6ull-alientek-nand.dtb  u-boot.bin  u-boot.imx  zImage
wangtian@wangtian-virtual-machine:~/linux/tftp_file$ 

可以看出, 在我这里 tftp服务所设置的 /linux/tftp_file/ 目录下,存在着内核镜像 zImage与imx6ull-alientek-nand.dtb 设备树文件(我这里所使用的开发板是 Nand_Flash版的)。

在开发板 uboot命令模式下,设置环境变量 bootargs 值:

=> setenv bootcmd 'tftp 0x80800000 zImage;tftp 0x83000000 imx6ull-alientek-nand.dtb;bootz 0x80800000 - 0x83000000'
=> saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x3c00000 -- 100% complete.
Writing to NAND... OK
=> 

(3)? 根文件系统rootfs则是通过nfs服务挂载(从虚拟机ubuntu系统)的方式,将开发板挂载到虚拟机ubuntu系统中的。

正点原子ALPHA开发板视频学习第三期中,我制作的根文件系统在 ubuntu系统下,之前开发板通过 nfs挂载在 ubuntu的 /home/wangtian/linux/nfs_File/目录下。

进入开发板 uboot命令模式下,设置环境变量 bootcmd 值:

=> setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.66:/home/wangtian/linux/nfs_File/rootfs,proto=tcp ip=192.168.1.50:192.168.1.66:192.168.1.1:255.255.255.0::eth0:off'
=> saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x3c00000 -- 100% complete.
Writing to NAND... OK
=> 

?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

三.? 重启开发板

以上设置完成后,开发板 Uboot命令模式下,输入"bootz" 命令重启开发板: ?????????????????????????????

=> boot

? 开发板启动过程中,出现如下提示信息:

出现这个提示,可能是 SD卡所烧写的 Uboot中没有设置 serverip的地址,即未设置 服务器ip地址,也就是 ubuntu系统的ip地址。根据之前经验,应该还会提示关于 网络的其他的 地址设置,例如,网关地址,子网掩码地址,Mac地址值等。

所以,需要设置网络相关的地址,这里通过手动输入命令设置(开发板 uboot命令模式下):

最后,重新启动开发板:

=> boot

至此,开发板启动完成后,输入 "Enter"回车键,可以进入根文件系统rootfs:

VFS: Mounted root (nfs filesystem) readonly on device 0:15.
devtmpfs: mounted
Freeing unused kernel memory: 400K (8090a000 - 8096e000)

Please press Enter to activate this console. 
/ # 
/ # 
/ # ls
bin             hello.c         proc            sys
dev             lib             root            tmp
etc             linuxrc         rootfs.tar.bz2  usr
hello           mnt             sbin            中文测试
/ # random: nonblocking pool is initialized

/ # 

文章来源:https://blog.csdn.net/wojiaxiaohuang2014/article/details/135022101
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。