12.13linux内核的移植

分析README可知

解压内核源码     		tar xfJ linux-5.10.61.tar.xz 
内核源码打补丁命令     for p in `ls -1 ../*.patch`; do patch -p1 < $p; done   
配置内核源码补丁文件    make ARCH=arm multi_v7_defconfig fragment*.config  
编译内核源码命令       make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040  
需要安装库信息		    mkimage工具 	sudo apt-get install u-boot-tools 

linux内核源码配置和编译

1.解压内核源码
2.进入linux内核源码
3.配置交叉编译工具链
4.内核源码打补丁命令	
5.配置内核源码补丁文件
6.因为FSMP1A开发板是参考DK1公板进行设计的,所以需要复制DK1设备树相关内容
7.编译内核源码
1.解压内核源码
     tar -vxf linux-5.10.61.tar.xz   
2.进入linux内核源码
    cd linux-5.10.61/
3.配置交叉编译工具链,打开Makefile文件,搜索:CROSS_COMPILE
    370 ARCH        ?= arm
    371 CROSS_COMPILE:=arm-linux-gnueabihf-
4.内核源码打补丁命令
    for p in `ls -1 ../*.patch`; do patch -p1 < $p; done  
5.配置内核源码补丁文件
    make ARCH=arm multi_v7_defconfig fragment*.config  
6.因为FSMP1A开发板是参考DK1公板进行设计的,所以需要复制DK1设备树相关内容,复制为FSMP1A
    1)进入到内核源码设备树目录下:linux-5.10.61/arch/arm/boot/dts
    2)复制相关设备树内容
        cp stm32mp157a-dk1.dts  stm32mp157a-fsmp1a.dts 
        cp stm32mp15xx-dkx.dtsi stm32mp15xx-fsmp1x.dtsi
    3)修改设备树文件: vi  stm32mp157a-fsmp1a.dts 
     	 13 #include "stm32mp15xx-fsmp1x.dtsi"
   	 	 16     model = "HQYJ STM32MP157A-FSMP1A Discovery Board";
    	 17     compatible = "hqyj,stm32mp157a-fsmp1a", "st,stm32mp157";
    4)进入到内核源码设备树目录下:linux-5.10.61/arch/arm/boot/dts,打开Makefile文件,添加FSMP1A设备树相关内容
        1098     stm32mp157a-fsmp1a.dtb \ ------>添加这一行内容
7.编译内核源码
    time make -j4 ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000000  

测试步骤

1.将~/tftpboot目录下,创建一个20221213文件夹
2.将~/tftpboot目录下,uImage和stm32mp157a-fsmp1a.dtb拷贝到20221213文件夹
4.进入linux内核源码arch/arm/boot/目录下,将uImage 文件拷贝到~/tftpboot/
5.进入linux内核源码arch/arm/boot/dts目录下,将stm32mp157a-fsmp1a.dtb文件拷贝到~/tftpboot/   
6.设置自启动参数bootargs
7.设置自启动命令bootcmd
8.将开发板重新上电,在倒计时时间进入0之前,不按下enter键,进入自启动模式
9.观察现象

内核错误方法解决

1.将设备树的源文件(stm32mp157a-fsmp1a.dts),和设备树的头文件(stm32mp15xx-fsmp1x.dtsi),复制到内核源码/arch/arm/boot/dts
2.需要打开这两个文件查看一下(更新时间戳)

测试

1.编译内核源码
    time make -j4 ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000000  
2.成功现象
  DTC     arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb -------->是否生成新的设备树文件
  Kernel: arch/arm/boot/uImage is ready -------->是否生成新的uImage镜像文件
3.进入linux内核源码arch/arm/boot/目录下,将uImage 文件拷贝到~/tftpboot/
4.进入linux内核源码arch/arm/boot/dts目录下,将stm32mp157a-fsmp1a.dtb文件拷贝到~/tftpboot/   
5.设置自启动参数bootargs
6.设置自启动命令bootcmd
7.将开发板重新上电,在倒计时时间进入0之前,不按下enter键,进入自启动模式
8.观察现象

解决热插拔问题

1.错误现象:
/etc/init.d/rcS: line 6: can't create /proc/sys/kernel/hotplug: nonexistent directory
2.在内核源码源码目录下执行make menuconfig
     Device Drivers  ---> 
         Generic Driver Options  ---> 
             [*] Support for uevent helper        ---> 选择[*] 
              (/sbin/hotplug) path to uevent helper     ---> 添加路径

makefile/Kconfig/.config三个文件关系

1.makefile文件作用:内核源码编译和配置文件
2.Kconfig文件作用:存放基于执行make menuconfig命令是,生成图形化界面配置信息内容 
3..config文件作用:存放配置相关所有信息,给Makfile进行使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AfsJoAnJ-1670931700285)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221213185809438.png)]

添加自己编写led灯驱动

1.添加自己的LED灯驱动程序选项
config LED_DRIVER
     11     bool "led driver"
     12     default y
     13     help
     14         this is DC22081 LED DRIVER
2.打开linux内核源码进入drivers/char目录下打开Makefile文件,在最后一行添加一句话
     obj-$(CONFIG_LED_DRIVER) += fsmp157a_led.o   
3.通过make menuconfig查看图形界面
4.在内核源码源码目录下执行make menuconfig
      Device Drivers  --->   
               Character devices  --->
                [*] led driver (NEW) 
5.编译内核源码   time make -j4 ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000000  
6.进入linux内核源码arch/arm/boot/目录下,将uImage 文件拷贝到~/tftpboot/
7.进入linux内核源码arch/arm/boot/dts目录下,将stm32mp157a-fsmp1a.dtb文件拷贝到~/tftpboot/   
8.设置自启动参数bootargs
9.设置自启动命令bootcmd
10.将开发板重新上电,在倒计时时间进入0之前,不按下enter键,进入自启动模式
11.观察现象,led灯并没有点亮

led灯测试步骤

1.将群里下发fsmp157a_led_test.c和fsmp157a_led.h这两个文件拷贝到~/nfs/rootfs目录
2.编译led灯应用程序
    arm-linux-gnueabihf-gcc fsmp157a_led_test.c 
3.在串口工具执行./a.out
4.观察串口工具是否打印信息,并且LED1/LED2/LED3是否点亮

到~/nfs/rootfs目录
2.编译led灯应用程序
    arm-linux-gnueabihf-gcc fsmp157a_led_test.c 
3.在串口工具执行./a.out
4.观察串口工具是否打印信息,并且LED1/LED2/LED3是否点亮
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值