目录
四、编译的模块的内核版本和加载的内核版本要同一个版本,不然会报错:
八、设备节点的名字与设备树节点的名字,有什么区别和联系,proc/device-tree显示的是哪一个节点?
一、先用集成烧录工具 mfgtool 烧录对应开发板的代码
1、MfgTool烧写的原理:
MfgTool其实是先通过 USB OTG先将uboot、 kernel和.dtb(设备树)这是三个文件下载到开发板的 DDR 中,注意不需要下载 rootfs。 就相当于直接在开发板的 DDR上启动Linux系统,等Linux系统启动以后再向EMMC中烧写完整的系统,包括uboot、linuxkernel、 .dtb(设备树)和 rootfs,因此 MfgTool 工作过程主要分两个阶段:
(1) 将firmware目录中的uboot、 linux kernel和.dtb(设备树),然后通过USB OTG将这个文件下载到开发板的DDR中, 目的就是在DDR中启动Linux系统,为后面的烧写做准备。
(2) 经过第(1)步的操作,此时Linux系统已经运行起来了,系统运行起来以后就可以很方便的完成对EMMC的格式化、分区等操作。 EMMC分区建立好以后就可以从files中读取要烧写的uboot、 linux kernel、 .dtb(设备树)和rootfs这4个文件,然后将其烧写到EMMC中,这个就是 MfgTool的大概工作流程。
2、firmeare 文件夹
将如下三个文件替换成自己编译出来的文件:
3、files 文件夹
将如下四个文件替换成自己编译出来的文件:
二、文件准备
1、uboot:
a.配置
b.编译
2、kernel(内核):
a.配置
b.编译 运行 ./mx6ull_alientek_emmc.sh
c.内核文件:arch/arm/boot/zImage
d. 设备树文件:arch/arm/boot/dts 对应的.dtb文件
3、.dtb(设备树):
4、rootfs(根文件系统):
三、用nfs或ftpt挂接根文件系统
1、在虚拟机 安装,配置,然后再启动nfs服务;
2、虚拟机网络设置成桥接模式;
3、设置开发板的网络环境:
setenv ipaddr 192.168.1.50 //设置开发板地址
setenv ethaddr b8:ae:1d:01:00:00
setenv gatewayip 192.168.1.1 //设置网关地址
setenv netmask 255.255.255.0
setenv serverip 192.168.1.253 //设置虚拟机地址
saveenv
4、在开发板ping通与虚拟机的地址;
命令使用:ping 服务器地址
注意!只能在 uboot中ping其他的机器,其他机器不能 ping uboot,因为uboot没有对 ping 命令做处理,如果用其他的机器 ping uboot 的话会失败!
5、设置开发板 bootcmd 环境变量
setenv bootcmd ‘nfs 80800000 192.168.31.116:/home/can/linux/nfs/zImage;nfs 83000000 192.168.31.116:/home/can/linux/nfs/imx6ull-alientek-emmc.dtb;bootz 80800000 - 8300000’
saveenv
6、设置开发板 bootargs
setenv bootargs ‘console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.31.116:/home/can/linux/nfs/rootfs ip=192.168.31.50:192.168.31.116:192.168.31.1:255.255.255.0::eth0:off
四、编译的模块的内核版本和加载的内核版本要同一个版本,不然会报错:
hrdevbase: version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ’ should be '4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8 ’
问题原因:这种报错是内核版本和模块版本不一致,所以导致加载不成功
解决:重新编译 重新编译内核和模块驱动程序,然后重新启动并重新加载新的驱动;
五、把驱动程序复制到指定文件:
sudo cp led.ko /home/can/linux/nfs/rootfs/lib/modules/4.1.15/ -f
六、加载 led.ko 驱动模块
depmod //第一次加载驱动的时候需要运行此命令
modprobe led.ko //加载驱动
驱动加载成功以后创建“/dev/led”设备节点,命令如下:
mknod /dev/led c 200 0
七、卸载驱动
rmmod led.ko
八、设备节点的名字与设备树节点的名字,有什么区别和联系,proc/device-tree显示的是哪一个节点?
1、在 /lib/modules/4.0.15 目录下查看当前系统存在的模块指令:
lsmod
2、查看系统挂接的设备节点和对应的主设备号:
cat /proc/devices
3、查看设备树节点:进入 /proc/device-tree 目录:
ls