更新板子的软件:
----------------------------
看 :<U-Boot source>/board/st/stm32mp1/README
一.通过网络更新
1.内核和设备树更新
由于内核和设备树在emmc的第四分区boots分区mmcblk2p2
1)进入安装路径,我在内核源码树外新建一个build编译的
- cd <path to install_artifact dir>/install_artifact ==>path to install_artifact dir = build
2) 远程把arm板的boots分区挂载到/boot启动目录来
- ssh root@192.168.0.104 mount /dev/mmcblk2p2 /boot
4)把boot目录下的所有编译拷贝到arm板/boot目录下
- scp -r boot/* root@192.168.0.104:/boot/
5)卸载根目录挂载
- ssh root@192.168.0.104 umount /boot/
2.内核模块更新
1)进入安装路径,我在内核源码树外新建一个build编译的
- cd <path to install_artifact dir>/install_artifact ==>path to install_artifact dir = build
2)移除这个install_artifact/lib/modules/<kernel version>/目录下的链接文件
- rm lib/modules/<kernel version>/source lib/modules/<kernel version>/build
3)可以有选择性的删除一些模块(减小每个内核模块的大小)
- find . -name "*.ko" | xargs $STRIP --strip-debug --remove-section=.comment --remove-section=.note --preserve-dates
4)拷贝内核模块
- scp -r lib/modules/* root@<ip of board>:/lib/modules/
5)在板子上生成模块依赖清单(modules.dep)和模块符号清单(symbols)
- ssh root@<ip of board> /sbin/depmod -a
6)同步磁盘和内存的数据
- ssh root@<ip of board> sync
7)重启板子进行更新
- ssh root@<ip of board> reboot
二.在linux PC通过SDcard更新
1.内核和设备树的更新
1)进入安装路径,我在内核源码树外新建一个build编译的
- cd <path to install_artifact dir>/install_artifact ==>path to install_artifact dir = build
2)确认sdcard是否已经挂载到linux PC的/media/$USER/bootfs目录下,一般通过读卡器会自动挂载到此目录
3)拷贝设备树和内核到bootfs分区
- cp -r boot/* /media/$USER/bootfs/
4) 每个人的电脑配置不一样,有些电脑需要加上sudo命令,如下:
- sudo cp -r boot/* /media/$USER/bootfs/
5)正确卸载sdcard
2.内核模块的更新
1)进入安装路径,我在内核源码树外新建一个build编译的
- cd <path to install_artifact dir>/install_artifact ==>path to install_artifact dir = build
2)移除这个install_artifact/lib/modules/<kernel version>/目录下的链接文件
- rm lib/modules/<kernel version>/source lib/modules/<kernel version>/build
3)可以有选择性的删除一些模块(减小每个内核模块的大小)
- find . -name "*.ko" | xargs $STRIP --strip-debug --remove-section=.comment --remove-section=.note --preserve-dates
4)确认sdcard挂载到Linux PC /media/$USER/rootfs目录下,一般通过读卡器插入电脑会自动挂载到此目录
5)拷贝内核模块
- cp -r lib/modules/* /media/$USER/rootfs/lib/modules/
有些需要加sudo命令,这个要根据电脑配置来
如$> sudo cp -r lib/modules/* /media/$USER/rootfs/lib/modules/
然后卸载sdcard
6)生成模块依赖(modules.dep)和模块符号清单(modules.dep)
- $> ssh root@<ip of board> depmod -a
同步数据
- $> ssh root@<ip of board> sync
重启更新
- $> ssh root@<ip of board> reboot
三.在板子uboot通过sdcard更新
首先确认,通过uboot板子进入存取设备
a.插入sdcard
b.启动按任何键进入uboot
c.通过usb OTG端口在PC与板子插入一根usb线
d.在板子uboot界面调用大容量存取功能
STM32MP> ums 0 mmc 0
ums <USB controller> <dev type: mmc|usb> <dev[:part]>
例如:
SDcard: ums 0 mmc 0
USB闪存: ums 0 usb 0
1. 内核和设备树更新
1)进入安装路径,我在内核源码树外新建一个build编译的
- cd <path to install_artifact dir>/install_artifact
2)移除这个install_artifact/lib/modules/<kernel version>/目录下的链接文件
- rm lib/modules/<kernel version>/source lib/modules/<kernel version>/build
3)可以有选择性的删除一些模块(减小每个内核模块的大小)
- find . -name "*.ko" | xargs $STRIP --strip-debug --remove-section=.comment --remove-section=.note --preserve-dates
4)确认sdcard挂载点是linux PC: /media/$USER/bootfs
- cp -r boot/* /media/$USER/bootfs/
根据配置有些电脑需要加sudo
- sudo cp -rf boot/* /media/$USER/bootfs/
正确卸载sdcard
注意: 内核和设备设的名字必须与extlinux.conf文件和文件系统一致
2.内核模块更新
1)进入安装路径,我在内核源码树外新建一个build编译的
- cd <path to install_artifact dir>/install_artifact
2)移除这个install_artifact/lib/modules/<kernel version>/目录下的链接文件 R
- rm lib/modules/<kernel version>/source lib/modules/<kernel version>/build
$> find . -name "*.ko" | xargs $STRIP --strip-debug --remove-section=.comment --remove-section=.note --preserve-dates
4)确认sdcard被挂载到Linux PC目录: /media/$USER/rootfs
然后拷贝模块到指定目录:
- cp -rf lib/modules/* /media/$USER/rootfs/lib/modules/
根据电脑配置,加sudo命令
sudo cp -r lib/modules/* /media/$USER/rootfs/lib/modules/
正确卸载sdcard
5)下次运行时,不要忘记生成一个模块依赖文件(modules.dep)和模块符号文件(modules.symbols)
on board> depmod -a
同步数据
在板子上: sync
重启板子进行更新
在板子上: reboot
四.通过sd卡更新内核和设备树(自己实践更新)
1)插入读卡器,虚拟机读出sd卡分区
直接复制uImage 和stm32mp157c-dk2.dtb到boots分区
sudo cp uImage stm32mp157c-dk2.dtb /media/my-linux/bootfs
3.通过sd卡更新模块
sudo cp -r lib/* /media/my-linux/rootfs/lib/
五.通过SD卡启动在arm系统中更新设备树、内核镜像
1)插入u盘,并挂载 u盘到/mnt目录
- mount /dev/sda1 /mnt
2)进入挂载的目录
- cd /mnt
3)挂载SD卡系统分区到指定目录
SD卡分区:
lrwxrwxrwx 1 root root 10 12月 4 14:34 bootfs -> ../../sdc4 //4分区是内核设备树分区
lrwxrwxrwx 1 root root 10 12月 4 14:34 fsbl1 -> ../../sdc1 //1分区是启动引导分区
lrwxrwxrwx 1 root root 10 12月 4 14:34 fsbl2 -> ../../sdc2 //2分区同1分区是启动引导分区
lrwxrwxrwx 1 root root 10 12月 4 14:34 rootfs -> ../../sdc6 //6分区是根文件系统分区
lrwxrwxrwx 1 root root 10 12月 4 14:34 ssbl -> ../../sdc3 //3分区是uboot.stm32镜像引导
lrwxrwxrwx 1 root root 10 12月 4 14:34 userfs -> ../../sdc7 //7分区是应用程序分区
lrwxrwxrwx 1 root root 10 12月 4 14:34 vendorfs -> ../../sdc5 //5分区是动态库分区
从上面分区情况可以看见4分区时内核设备树分区,所以需要把该分区挂载到其他目录:
- mount /dev/mmcblk1p4 /media/
4)拷贝更新,把/mnt目录下的/boot目录所有文件拷贝到该挂载分区
- cp boot/* /media/ -rf
- -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
- -f:覆盖已经存在的目标文件而不给出提示
5)同步,并重启
- sync
- reboot
六.有用的信息指导
1.如何在板子上生成一个数据库
在板子上: depmod -a
(重启之前不要忘记了同步文件系统)
在板子上: sync
2.怎么看外部模块加载清单
lsmod
3.怎么看内核模块的信息
在板子上:modinfo ./install_artifact/lib/modules/<kernel version>/kernel/drivers/leds/led-class-flash.ko
例如:
文件名字: <build directory>./install_artifact/lib/modules/4.9.23-g3e866b0/kernel/drivers/leds/led-class-flash.ko
许可证: GPL v2
描述: LED Flash class interface
作者: Jacek Anaszewski <j.anaszewski@samsung.com>
依赖:
入树: Y
寄生: 4.9.23-g3e866b0 SMP mod_unload ARMv7 p2v8