系统移植第二天

本文详细介绍U-Boot的移植步骤、配置与编译流程,包括组网过程、TF卡启动盘的制作及U-Boot镜像文件的测试。涵盖从开发环境搭建到启动流程的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

组网过程

大概流程:
    1.关闭防火墙,设置以太网卡(百兆全双工)
    2.ubuntu下设置桥接模式,更改静态IP(ifconfig)
        1>编辑----->虚拟网络编辑器----->桥接模式----->选择网卡
        2>虚拟机----->设置----->网络适配器2----->桥接模式
        IP地址----->192.168.8.188
        子网掩码----->255.255.255.0
        网关----->192.168.8.1
        DNS----->8.8.8.8
    3.开发板网络配置
        1>setenv serverip 192.168.8.188 ----->设置服务器ip地址
        2>setenv ipaddr 192.168.1.100 ----->设置服务器开发板地址
        3>setenv netmask 255.255.255.0 ----->设置开发板子网掩码
        4>setenv gatewayip 192.168.1.1 ----->设置开发板网关
        5>saveenv -----> 保存
    4.测试ping
        pint 192.168.8.88
    5.测试tftp命令
        1>拷贝bin文件到tftpboot目录下,asm-led.bin
        2>tftp 0xc0008000 asm-led.bin
        3>在串口工具输入go运行 go 0xc0008000
        
    如何设置bootcmd命令,倒计时进入0之前,可以自动执行tftp命令
    setenv bootcmd tftp 0xc0008000 asm-led.bin\;go 0xc0008000
    saveenv

uboot源码获取

1.uboot官网获取:ftp://ftp.denx.de/pub/u-boot/    前提是是芯片厂家将uboot源码开源到uboot官网上
2.ST开发社区获取:https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32MP1_Developer_Package
3.ST官网:https://www.st.com/en/embedded-software/stm32mp1dev.html
4.开发板厂家:直接找对应的开发板厂家进行获取,一定有支持开发板的相关镜像文件
5.项目经理:一定有支持开发板的相关镜像文件

uboot源码移植准备过程

大概流程

1.将Uboot源码拷贝到Ubuntu下,在家目录下创建demo目录,将源码文件解压
    2.在家目录下创建一个文件夹FSMP1A,将文件拷贝到FSMP1A目录下
    3.进入目录,对压缩文件解压
    4.进入uboot源码目录下,对uboot源码进行解析
    5.因为uboot源码使用Makefile进行编译的,所以需要查看make相关帮助命令
    6.分析README文件
    7.总结:
        通过README文件分析可知,配置板子的默认缺省命令是:make <board_name>_defconfig

详细流程

1.在家目录下创建一个文件夹FSMP1A
   2.将u-boot-stm32mp-v2020.10-stm32mp-r2-r0拷贝到FSMP1A目录下
        cp u-boot-stm32mp-v2020.10-stm32mp-r2-r0/ ~/FSMP1A/ -rf
   3.进入到~/FSMP1A/u-boot-stm32mp-v2020.10-stm32mp-r2-r0目录
   4.对u-boot-stm32mp-v2020.10-stm32mp-r2-r0.tar.gz目录进行解压
        tar -vxf u-boot-stm32mp-v2020.10-stm32mp-r2-r0.tar.gz
   5.进入uboot源码目录下,对uboot源码进行解析
       1>平台相关
           arch:存放平台相关架构内容
           board:存放各个板子相关文件
       2>平台无关
           Makefile:工程管理文件
           configs:配置相关文件
           drivers:存放驱动相关内容
           README:帮助文档
   6.因为uboot源码使用Makefile进行编译的,所以需要查看make相关帮助命令信息 ----->make help
       1>清除中间文件  -----> make distclean
       Cleaning targets:
         clean  - Remove most generated files but keep the config
         mrproper  - Remove all generated files + config + various backup files
         distclean  - mrproper + remove editor backup and patch files
         2>基于图形化界面配置 -----> make menuconfig
         menuconfig  - Update current config utilising a menu based program
         3>编译uboot源码 -----> make all
         all  - Build all necessary images depending on configuration
   7.分析README文件
        195 For all supported boards there are ready-to-use default
        196 configurations available; just type "make <board_name>_defconfig".
        197
        198 Example: For a TQM823L module type:
        199
        200     cd u-boot                                                                                                
        201     make TQM823L_defconfig
   8.总结
       通过README文件分析可知,配置板子的默认缺省命令是:make <board_name>_defconfig
       问题:如何确定本次移植FSMP1A开发板<board_name>是什么?

如何确定<board_name>名字

大概流程:

方法1:
    1>在uboot源码顶层目录下执行:make fsmpla_defconfig
    2>在uboot源码顶层目录下,进入configs目录,查看配置文件:ls stm32mp*
方法2:
    1>因为uboot源码使用makefile进行管理编译,所以在makefile文件中可以找到make<board_name>_defconfig对应的目标信息
    1>在uboot源码顶层目录下,打开Makefile文件,搜索:config
    2>在uboot源码顶层目录下,打开Makefile文件,搜索:config,使用echo将变量信息进行打印
    3>在uboot源码顶层目录下执行: make fsmp1a_defconfig
    4>总结:通过以上命令打印可知$(Q)取消回显,所以将$(Q)去掉,在次执行 make fsmp1a_defconfig
        查看打印信息:
        make -f ./scripts/Makefile.build obj=scripts/kconfig fsmp1a_defconfig = make    obj=scripts/kconfig fsmp1a_defconfig
方法3:通过方法2分析可知,到指定scripts/kconfig目录下,打开Makefile文件,搜索目标:defconfig
    1>在scripts/kconfig目录下,打开Makefile文件,搜索目标:defconfig
    2>在scripts/kconfig目录下,打开Makefile文件,搜索目标:defconfig,使用echo命令,对变量信息进行打印
    3>在uboot源码顶层目录下执行: make fsmp1a_defconfig,会出现如下打印信息
    4>总结:通过以上命令打印可知$(Q)取消回显,所以将$(Q)去掉,在次执行 make fsmp1a_defconfig
        查看打印信息:scripts/kconfig/conf  --defconfig=arch/../configs/fsmp1a_defconfig Kconfig
4.总结:make <board_name>_defconfig执行过程
    conf是一个可执行文件,--defconfig=arch/../configs/fsmp1a_defconfig和Kconfig作为参数传递给conf

详细流程:

1.方法1:如何确定<board_name>名字
    1>在uboot源码顶层目录下执行: make fsmp1a_defconfig
    2>在源码目录下出现如下错误信息:
​
    *** Can't find default configuration "arch/../configs/fsmp1a_defconfig"!
    通过阅读可知:在arch/../configs/fsmp1a_defconfig不能找到默认的配置文件
​
    3>进入uboot源码顶层目录下,进入configs目录,查看配置文件: ls stm32mp*
        stm32mp15_basic_defconfig  : 非安全默认配置文件
        stm32mp15_trusted_defconfig :安全默认配置文件
        
2.方法2:因为uboot源码使用makefile进行管理编译,所以在makefile文件中可以找到make <board_name>_defconfig对应的目标信息:
        1>在uboot源码顶层目录下,打开Makefile文件,搜索:config
             564 %config: scripts_basic outputmakefile FORCE
             565     $(Q)$(MAKE) $(build)=scripts/kconfig $@
        2>在uboot源码顶层目录下,打开Makefile文件,搜索:config,使用echo将变量信息进行打印
            564 %config: scripts_basic outputmakefile FORCE
            565     @echo $(Q)
            566     @echo $(MAKE)
            567     @echo $(build)
            568     @echo $@                                                                                                 
            569     $(Q)$(MAKE) $(build)=scripts/kconfig $@
        3>在uboot源码顶层目录下执行: make fsmp1a_defconfig,会出现如下打印信息
            @
            make
            -f ./scripts/Makefile.build obj
            fsmp1a_defconfig
        4>总结:通过以上命令打印可知$(Q)取消回显,所以将$(Q)去掉,在次执行 make fsmp1a_defconfig,查看打印信息
        make -f ./scripts/Makefile.build obj=scripts/kconfig fsmp1a_defconfig = make obj=scripts/kconfig fsmp1a_defconfig
        
3.方式3:通过方法2分析可知,到指定scripts/kconfig目录下,打开Makefile文件,搜索目标:defconfig
        1>在scripts/kconfig目录下,打开Makefile文件,搜索目标:defconfig
            109 %_defconfig: $(obj)/conf
            110     $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)  
        2>在scripts/kconfig目录下,打开Makefile文件,搜索目标:defconfig,使用echo命令,对变量信息进行打印
                109 %_defconfig: $(obj)/conf
                110     @echo $(Q)
                111     @echo $(silent)
                112     @echo $(SRCARCH)
                113     @echo $@
                114     @echo $(Kconfig)
                115    $(Q)  $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)  
        3>在uboot源码顶层目录下执行: make fsmp1a_defconfig,会出现如下打印信息
                @
                
                ..
                fsmp1a_defconfig
                Kconfig
        4>总结:通过以上命令打印可知$(Q)取消回显,所以将$(Q)去掉,在次执行 make fsmp1a_defconfig,查看打印信息
            scripts/kconfig/conf  --defconfig=arch/../configs/fsmp1a_defconfig Kconfig
4.总结:make <board_name>_defconfig执行过程
    scripts/kconfig/conf:通过file命令进行查看,可知是一个elf可执行文件
    --defconfig=arch/../configs/fsmp1a_defconfig:板子目标文件
    Kconfig:uboot源码目录下配置文件
    通过以上分析可知:conf是一个可执行文件,--defconfig=arch/../configs/fsmp1a_defconfig和Kconfig作为参数传递给conf

basic版本启动流程

流程作用
BL0芯片厂家出厂时,固化到芯片内部的一段代码
BL1FSBL(u-boot-spl.stm32)
BL2SSBL(u-boot.img)

uboot源码配置和编译流程

大概流程:

1.进入uboot源码顶层目录下,配置交叉编译工具链,打开Makefile文件,搜索CROSS_COMOILE
    CROSS_COMOILE:指定交叉编译工具链前缀
2.在uboot源码顶层目录下配置支持fsmpla开发板,非安全版本默认配置文件
    make stm32mp15_basic_defconfig
3.在uboot源码顶层目录下执行基于图形化界面配置信息
    make menuconfig
    需要安装库 :sudo apt-get install ncurses-dev
4.设备数相关文件(驱动细讲)
5.在uboot源码顶层目录下,进入arch/arm/dts目录下,查看DK1公板相关设备树内容
    复制文件,改名为FSMP1A
    更改打印信息
    打开Makefile添加FSMP1A平台设备树内容
6.对uboot源码进行编译:time make -j4 all

详细流程:

1.进入uboot源码顶层目录下
2.配置交叉编译工具链,打开uboot源码顶层目录下Makefile文件,搜索:CROSS_COMPILE
    将以下内容更改为:
     262 ifeq ($(HOSTARCH),$(ARCH))
     263 CROSS_COMPILE ?=      
     更改为:
    262 ifeq (arm,arm)
    263 CROSS_COMPILE ?=arm-linux-gnueabihf-
3. 在uboot源码顶层目录下配置支持fsmp1a开发板,非安全版本默认配置文件
      make stm32mp15_basic_defconfig
     成功现象:
        #
        # configuration written to .config
        #
4.在uboot源码顶层目录下执行基于图形化界面配置信息
    make menuconfig
5.设备树相关文件
    dts--------->设备树源文件(相当于C语言中.c文件)
    dtsi--------->设备树头文件(相当于C语言中.h文件)
    DTC--------->设备树编译工具(相当于C语言中gcc编译器) 
    dtb--------->生成设备树可执行文件
    格式:
    /{
            {
                节点相关信息;            
            };
    };
6.在uboot源码顶层目录下,进入arch/arm/dts目录下,查看DK1公板相关设备树内容
    1>进入arch/arm/dts目录下,通过命令查看:ls stm32*
        stm32mp157a-dk1.dts
        stm32mp157a-dk1-u-boot.dtsi
        stm32mp15xx-dkx.dtsi
    2>进入arch/arm/dts目录下,将DK1公板设备树内容复制一份为FSMP1A平台相关内容
        cp stm32mp157a-dk1.dts stm32mp157a-fsmp1a.dts
        cp stm32mp157a-dk1-u-boot.dtsi stm32mp157a-fsmp1a-u-boot.dtsi
        cp stm32mp15xx-dkx.dtsi stm32mp15xx-fsmp1x.dtsi
    3>进入arch/arm/dts目录下,打开设备树stm32mp157a-fsmp1a.dts,需要更改以下内容
        12 #include "stm32mp15xx-dkx.dtsi"
        13 
        14 / {                                                                                                           
        15     model = "STMicroelectronics STM32MP157A-DK1 Discovery Board";
        16     compatible = "st,stm32mp157a-dk1", "st,stm32mp157";
        更改为
         12 #include "stm32mp15xx-fsmp1x.dtsi"
        13 
        14 / {
        15     model = "HQYJ STM32MP157A-FSMP1A Discovery Board";
        16     compatible = "hqyj,stm32mp157a-fsmp1a", "st,stm32mp157";   
    4>进入arch/arm/dts目录下,打开Makefile文件,添加FSMP1A平台设备树内容
        945 dtb-$(CONFIG_STM32MP15x) += \
        946     stm32mp157a-dk1.dtb \
        947     stm32mp157a-fsmp1a.dtb \  ------>这一行为需要添加的内容
7.对uboot源码进行编译
    time make -j4 all
8.成功现象
    u-boot-spl.stm32
    u-boot.img

制作TF卡启动盘

大概流程:

1.插卡,连接到虚拟机
2.查看TF卡分区 ls /dev/sd*
3.删除原有分区 sudo parted -s /dev/sdb mklabel msdos
4.对TF进行重新分区 
	sudo sgdisk --resize-table=128 -a 1 -n 1:34:545 -c 1:fsbl1 -n 2:546:1057 -c 2:fsbl2 -n 3:1058:5153 -c 3:ssbl -n 4:5154:136225 -c 4:bootfs -n 5:136226 -c 5:rootfs -A 4:set:2 -p /dev/sdb -g
5.查看分区是否成功 ls /dev/sd*
6.将uboot镜像文件烧写到对应的分区中

详细流程:

1.将TF卡插入到读卡器中,并将读卡器插入到电脑USB口,需要连接到虚拟机
2.查看TF卡分区
    linux@ubuntu:~/FSMP1A/u-boot-stm32mp-v2020.10-stm32mp-r2-r0/u-boot-stm32mp-v2020.10-stm32mp-r2$ ls /dev/sd*
    /dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb3  /dev/sdb4  /dev/sdb5
3.首先删除原有分区
    sudo parted -s /dev/sdb mklabel msdos
    成功现象:
     linux@ubuntu:~/FSMP1A/u-boot-stm32mp-v2020.10-stm32mp-r2-r0/u-boot-stm32mp-v2020.10-stm32mp-r2$ ls /dev/sd*
    /dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  
    
4.对 tf 进行重新分区,需要注意查看打印信息是否分区成功
    sudo sgdisk --resize-table=128 -a 1 -n 1:34:545 -c 1:fsbl1 -n 2:546:1057 -c
 2:fsbl2 -n 3:1058:5153 
    -c 3:ssbl -n 4:5154:136225 -c 4:bootfs -n 5:136226 -c 5:rootfs -A 4:set:2 -p
 /dev/sdb -g
    解释:
        sgdisk:分区
        --resize-table=128 -a 1:对齐
        -n:创建一个新的分区
        1:第一个分区
        34:起始块号
        545:终止块号
        -c 1:fsbl1:分区名字
         -A 4:set:2:设置分区表属性
         -p
 /dev/sdb -g:打印分区表
5.查看分区是否成功,ls /dev/sd*
    linux@ubuntu:~/FSMP1A/u-boot-stm32mp-v2020.10-stm32mp-r2-r0/u-boot-stm32mp-v2020.10-stm32mp-r2$ ls /dev/sd*
    /dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb3  /dev/sdb4  /dev/sdb5
6.将uboot镜像文件烧写到对应的分区中
    linux@ubuntu:$ sudo dd if=u-boot-spl.stm32 of=/dev/sdb1 conv=fdatasync
    linux@ubuntu:$ sudo dd if=u-boot-spl.stm32 of=/dev/sdb2 conv=fdatasync
    linux@ubuntu:$ sudo dd if=u-boot.img of=/dev/sdb3 conv=fdatasync
    解释:
        dd:拷贝文件命令
         if:input file 输入文件名字
         of: output file 输出文件名字
         conv=fdatasync:以物理方式写入

测试uboot镜像文件

1.将tf卡设备从ubuntu中退出,点击虚拟机---->可移动设备----->断开连接
2.将TF卡插入到开发板中
3.选择开发板启动方式为TF卡进行启动,拨动拨码开关为TF卡启动(101)
4.观察现象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值