本文继前面几篇文章的学习,前面学习编写字符设备驱动的框架,以及编译。
文章地址如下:
本文来学习字符设备驱动的加载与卸载。
(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
/ #