ST MP157固件烧录及Linux内核驱动调试过程

497 阅读2分钟

1 固件烧写

  • 准备连线 image.png image.png image.png image.png
  • 烧写过程,进行中 image.png
  • 如果不想更新文件系统就不烧写,我们可以编辑 atk_emmc-stm32mp157d-atk-qt.tsv,将烧写文件系统的配置信息即最后一行,将“p”修改为“PE”,我们在 ATK-STM32MP157 的Linux驱动开发指南上有详细的解释。修改为“PE”即代表跳过,不烧写,如下 image.png

2 固件启动

  • 烧写完成如下图,拨码到 010,eMMC 启动即可,注意:OTG是烧写线,烧写完毕后,拔出即可。另外整个固件烧写过程,无需启动虚拟机,在Windows上完成所有下载过程 image.png image.png image.png

3 网络调试(在1.3节基础上)

3.1 在1.3节基础上,设置网络启动环境

  • 在1.3节基础上,可以基于TFTP调试设备树及内核,基于NFS可以调试根文件系统 image.png
  • NFS调试根文件系统 image.png
  • TFTP调试设备树及内核 image.png
  • mp157drivers开发设备驱动 image.png
  • 进入uboot image.png

3.2 设置uboot IP/bootargs/bootcmd

1:IP设置
setenv ipaddr 192.168.0.105
setenv ethaddr b8:ae:1d:01:01:01
setenv gatewayip 192.168.0.1
setenv netmask 255.255.255.0
setenv serverip 192.168.0.111
saveenv

2:nfs调试
nfs C2000000 192.168.0.111:/home/qinkaixin/linux/nfs/rootfs/test

3:设置nfs根文件系统
setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.0.111:/home/qinkaixin/linux/nfs/rootfs,proto=tcp rw ip=192.168.0.105:192.168.0.111:192.168.0.1:255.255.255.0::eth0:off'
saveenv

4:tftp网络调试
setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'
saveenv

boot

4 驱动开发

4.1 进入驱动开发目录,修改Makefile,KERNELDIR是linux源码5.4.31目录

pwd
/home/qinkaixin/linux/mp157drivers
ls
01_chrdevbase  02_led  03_newchrled  06_beep  11_key  13_irq  20_input

cd /home/qinkaixin/linux/mp157drivers/13_irq

- vim Makefile

    KERNELDIR := /home/qinkaixin/tools/atk_install/alientek_linux
    CURRENT_PATH := $(shell pwd)

    obj-m := key.o

    build: kernel_modules

    kernel_modules:
            $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules

    clean:
            $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

4.2 拷贝驱动到NFS根文件系统

- sudo cp beep.ko beepApp /home/qinkaixin/linux/nfs/rootfs/lib/modules/5.4.31/ -f

4.3 拷贝编译后的设备树stm32mp157d-atk.dtb到tftpboot

qinkaixin@qinkaixin-virtual-machine:~/tools/atk_install/alientek_linux$ vim /home/qinkaixin/tools/atk_install/alientek_linux/arch/arm/boot/dts/stm32mp157d-atk.dtsi
qinkaixin@qinkaixin-virtual-machine:~/tools/atk_install/alientek_linux$ make dtbs
  DTC     arch/arm/boot/dts/stm32mp157d-atk.dtb
  DTC     arch/arm/boot/dts/stm32mp157d-atk-mipi.dtb
  DTC     arch/arm/boot/dts/stm32mp157d-atk-hdmi.dtb
- cp /home/qinkaixin/tools/atk_install/alientek_linux/arch/arm/boot/dts/stm32mp157d-atk.dtb /home/qinkaixin/linux/tftpboot/

4.4 拷贝编译后的内核uImage到tftpboot

- cp /home/qinkaixin/tools/atk_install/alientek_linux/arch/arm/boot/uImage /home/qinkaixin/linux/tftpboot/

4.5 基于上面设置的bootargs/bootcmd,网络启动

image.png

4.6 进入开发板/lib/modules/5.4.31目录,执行驱动挂载

image.png image.png

4.7 驱动测试

image.png image.png

cd /lib/modules/5.4.31
depmod
modprobe keyirq.ko
cat /proc/interrupts
./keyirqApp /dev/key
rmmod keyirq.ko