12.08笔记(u-boot启动盘制作)

一、组网过程

大概流程:
	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>名字

4.1大概流程:

方法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

4.2具体步骤:

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源码配置和编译流程

6.1大概流程:

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

6.2详细流程:

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

七、制作启动盘

7.1制作:

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镜像文件烧写到对应的分区中

7.2步骤:

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:以物理方式写入
 		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:以物理方式写入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值