aspeed 2600适配u-boot/kernel
创始人
2024-09-25 18:51:12
0

1.说明

本文采取aspeed sdk v09.01版本来适配自己的实际的硬件开发平台。!!非采取qemu模拟方式!!

2.采用的镜像文件

2.1 采用网站编译好的镜像

采用网站: https://github.com/AspeedTech-BMC/openbmc/releases的文件:
1.ast2600-default-515-obmc.tar.gz.选择里面的文件image-bmc.发现BMC启动不了,u-boot挂了。
2.ast2600-default-obmc.tar.gz里面的image-bmc.发现BMC启动不了,报错:

Boot from spi libfdt fdt_check_header(): FDT_ERR_BADMAGIC Error loading kernel FIT image ast# BP1c00 

在这里插入图片描述

注意: 使用openbmc中的u-boot更新固件,在u-boot命令行可以采用的命令如下:

# mw 0x1E620064 0x500  //停止WDT2 # setenv gatewayip 10.245.27.1 //设置gatewayip # setenv netmask 255.255.255.0 //设置网关 # dhcp //获取bmc ip 或者使用 setenv ipaddr 10.245.27.xx # setenv serverip 10.245.27.xx  //设置tftp服务器ip目的地址 # tftp 0x81000000 image-bmc  //tftp 下载文件 # sf probe 0:0     //选中 flash0 # sf update 0x81000000 0x000000 0x4000000 //更新固件 

2.2 自行编译镜像

从网站: https://github.com/AspeedTech-BMC/openbmc 上选择sdkv09.01版本的代码之后,编译:

$ source setup ast2600-default $ bitbake obmc-phosphor-image 

产生的固件image-bmc烧录之后,发现报错:

libfdt fdt_check_header(): FDT_ERR_BADMAGIC 

使用命令print查看环境信息:

ast# print baudrate=115200 boot_ast2700=echo "Boot from ${boot_device}!";if test ${boot_device} = mmc; then run bootmmc; fi;if test ${boot_device} = spi; then run bootspi; fi;ves boot_device=spi boota=setenv bootpart 2; setenv rootfs rofs-a; run setmmcargs; ext4load mmc 0:${bootpart} ${loadaddr} fitImage && bootm; echo Error loading kernel FITe bootargs=console=ttyS4,115200n8 root=/dev/ram rw bootb=setenv bootpart 3; setenv rootfs rofs-b; run setmmcargs; ext4load mmc 0:${bootpart} ${loadaddr} fitImage && bootm; echo Error loading kernel FITe bootcmd=echo Boot from ${boot_device}; if test ${boot_device} = mmc; then run bootmmc; fi; if test ${boot_device} = spi; then run bootspi; fi; bootdelay=2 bootfile=all.bin bootmmc=if test "${bootside}" = "b"; then run bootb; run boota; else run boota; run bootb; fi bootside=a bootspi=fdt addr 20160000 && fdt header get fitsize totalsize && cp.b 20160000 ${loadaddr} ${fitsize} && bootm; echo Error loading kernel FIT image fdtcontroladdr=bcf55f18 gatewayip=192.168.0.1 ipaddr=192.168.0.45 loadaddr=0x83000000 netmask=255.255.255.0 rootfs=rofs-a serverip=192.168.0.81 setmmcargs=setenv bootargs ${bootargs} rootwait root=PARTLABEL=${rootfs} stderr=serial@1e784000 stdin=serial@1e784000 stdout=serial@1e784000  Environment size: 1265/131068 bytes 

环境变量默认值来源于:build/ast2600-default/workspace/sources/u-boot-aspeed-sdk/include/configs/evb_ast2600.h.
然后使用命令fdt addr:

ast# fdt addr 20160000 libfdt fdt_check_header(): FDT_ERR_BADMAGIC 

分析到文件:meta-aspeed/conf/machine/evb-ast2600.conf中使用的dts信息:

KERNEL_DEVICETREE = "aspeed/aspeed-ast2600-evb.dtb"  UBOOT_MACHINE = "ast2600_openbmc_spl_defconfig" UBOOT_DEVICETREE = "ast2600-evb" 

查看linuxflash layout:
build/ast2600-default/workspace/sources/linux-aspeed/arch/arm/boot/dts/aspeed/aspeed-ast2600-evb.dts
中,引用了build/ast2600-default/workspace/sources/linux-aspeed/arch/arm/boot/dts/aspeed/aspeed-evb-flash-layout-64.dtsi

// SPDX-License-Identifier: GPL-2.0+ /*  * Copyright (C) 2023 ASPEED.  */  partitions { 	compatible = "fixed-partitions"; 	#address-cells = <1>; 	#size-cells = <1>;  	u-boot@0 { 		reg = <0x0 0x140000>; // 1280KB 		label = "u-boot"; 	};  	u-boot-env@140000 { 		reg = <0x140000 0x20000>; // 128KB 		label = "u-boot-env"; 	};  	kernel@160000 { 		reg = <0x160000 0x800000>; // 8MB 		label = "kernel"; 	};  	rofs@960000 { 		reg = <0x960000 0x24a0000>; // 36.625MB 		label = "rofs"; 	};  	rwfs@2e00000 { 		reg = <0x2e00000 0x1200000>; // 18MB 		label = "rwfs"; 	}; }; 

从基本信息来看,代码基本上没问题,那么,进入u-boot中手动去加载dts,查看是否仍然有问题:

1.在u-boot中disable FMC_WDT2

# mw 0x1e620064 0x0  //disable FMC_WDT2 

2.在主机中,将fitImage文件拷贝到tftp服务器中:

# cp tmp/deploy/images/ast2600-default/fitImage /home/wityuan/Desktop/tftp 

3.设置BMC的ip等信息

# setenv gatewayip 10.245.27.1 # setenv netmask 255.255.255.0 # dhcp # setenv serverip 10.245.27.69 //服务器ip 

4.在u-boot中加载fitImage

# tftp 0x83000000 fitImage 

5.使用fdt addr加载fdt信息

# fdt addr 0x83000000 # fdt header get fitsize totalsize # cp.b 0x83000000 ${loadaddr} ${fitsize} 

6.启动linux

使用命令:

# bootm 

可以看到系统加载成功。

在这里插入图片描述

7.排查

1.tftp 0x83000000 fitImage //将数据加载到0x83000000 地址上 2.使用md.b 0x83000000  20 查看数据 2.使用notepad++查看image-bmc的0x00160000地址上的数据 

在这里插入图片描述
在这里插入图片描述
使用sf read读取flash0地址,发现数据不正确:
在这里插入图片描述
在这里插入图片描述
切换到flash2启动(包含正常启动的uboot),然后使用flash2排查flash1的数据:
在这里插入图片描述
数据符合预期。

因此: sdk09.01uboot代码是有问题的. 工具sf read需要修正或者仅仅是dts配置有问题,导致spi工作不正常。

修改build/ast2600-default/workspace/sources/u-boot-aspeed-sdk/arch/arm/dts/ast2600-evb.dts中:

&fmc { 	status = "okay";  	pinctrl-names = "default"; 	pinctrl-0 = <&pinctrl_fmcquad_default>;  	flash@0 { 		compatible = "spi-flash", "sst,w25q256"; 		status = "okay"; 		spi-max-frequency = <50000000>; 		spi-tx-bus-width = <2>; 		spi-rx-bus-width = <2>; 	};  	flash@1 { 		compatible = "spi-flash", "sst,w25q256"; 		status = "okay"; 		spi-max-frequency = <50000000>; 		spi-tx-bus-width = <2>; 		spi-rx-bus-width = <2>; 	}; }; 

执行:

# bitbake -c build u-boot-aspeed-sdk # bitbake -c deploy u-boot-aspeed-sdk 

对于flash(mx66l512)芯片,默认的是3B模式,需要注意,后面u-boot代码都改为设置4B模式一次,详见代码:

在这里插入图片描述
另外,需要修改linux代码:build/ast2600-default/workspace/sources/linux-aspeed/arch/arm/boot/dts/aspeed/aspeed-ast2600-evb.dts:

&fmc { 	status = "okay"; 	pinctrl-names = "default"; 	pinctrl-0 = <&pinctrl_fwqspi_default>;  	flash@0 { 		status = "okay"; 		m25p,fast-read; 		label = "bmc"; 		spi-rx-bus-width = <2>; 		spi-tx-bus-width = <2>; 		spi-max-frequency = <50000000>; #include "aspeed-evb-flash-layout-64.dtsi" 	};  	flash@1 { 		status = "okay"; 		m25p,fast-read; 		label = "fmc0:1"; 		spi-rx-bus-width = <2>; 		spi-tx-bus-width = <2>; 		spi-max-frequency = <50000000>; 	};  	flash@2 { 		status = "disabled"; 		m25p,fast-read; 		label = "fmc0:2"; 		spi-rx-bus-width = <4>; 		spi-tx-bus-width = <4>; 		spi-max-frequency = <50000000>; 	}; }; 

最重要的是需要设置:

		spi-rx-bus-width = <2>; 		spi-tx-bus-width = <2>; 

否则会发生报错:

在这里插入图片描述
以上,修改完成后,在ac上电时候,需要进入u-boot手动禁止掉watchdog:

//disable fmc watchdog # mw 0x1e620064 0x0 # //disable watchdog  mw 0x1e78508c 0x0 

以上,成功进入BMC系统:

在这里插入图片描述
在这里插入图片描述

3.适配网络

当前系统启动,网络并不能分配地址,报错如:
在这里插入图片描述

当前使用的是硬件上的MAC1(datasheet数值加1)连接RTL8211,作为dedicated网络。MAC2(datasheet数值加1)不做网络用途。

在这里插入图片描述

修改代码build/ast2600-default/workspace/sources/linux-aspeed/arch/arm/boot/dts/aspeed/aspeed-ast2600-evb.dts内容:

&mdio0 { 	status = "okay";  	ethphy0: ethernet-phy@0 { 		compatible = "ethernet-phy-ieee802.3-c22"; 		reg = <1>; 	}; }; 

启动BMC后,能找到网卡设备:
在这里插入图片描述
在这里插入图片描述
web可以访问:

在这里插入图片描述
ssh也可以访问到:
在这里插入图片描述
ipmitool也可以访问到:
在这里插入图片描述

简单看一下"reg = <0x1>"的解析流程:

build/ast2600-default/workspace/sources/linux-aspeed/drivers/net/mdio/of_mdio.c __of_mdiobus_register() 	 build/ast2600-default/workspace/sources/linux-aspeed/include/linux/of_mdio.h --->  of_mdio_parse_addr()  	---> ret = of_property_read_u32(np, "reg", &addr); 		/* A PHY must have a reg property in the range [0-31] */     ---> if (addr >= PHY_MAX_ADDR) {           ... 		} 

所以该:reg值的范围是0~31,概念为:PHY_MAX_ADDR.

原理图上为:

在这里插入图片描述

在这里插入图片描述
此处描述如果有误,还请告知^ _ ^ .

4.修复重启

如果AC,会发现BMC执行到kernel一段时间之后就会启动到flash2上,这是因为fmc watchdog的超时导致。

可以在uboot代码中:build/ast2600-default/workspace/sources/u-boot-aspeed-sdk/arch/arm/mach-aspeed/ast2600/board_common.c添加一段代码:

void board_add_ram_info(int use_default) { ... 	//disable fmc watchdog and watchdog 	{ 		unsigned long value = 0;         //disable watchdog         *((volatile unsigned long *)(0x1e78508c)) = 0x0; 		value = *((volatile unsigned long *)(0x1e78508c));         printf("\nwatchdog stop: 0x%08x \n", value); 		//disable fmc watchdog         *((volatile unsigned long *)(0x1e620064)) = 0x0; 		value = *((volatile unsigned long *)(0x1e620064));         printf("\nfmc watchdog stop: 0x%08x \n", value);  	} } ... 

5.修复过多打印

例如串口频繁打印:

# [   45.604472] ipmi-ssif-host 4-0010: Warn: on_stop_event unexpected SLAVE STOP in state=SSIF_ABORTING 

可以直接在代码里面:build/ast2600-default/workspace/sources/linux-aspeed/drivers/char/ipmi/ssif_bmc.c中注释:

		// dev_warn(&ssif_bmc->client->dev, 		// 	 "Warn: %s unexpected SLAVE STOP in state=%s\n", 		// 	 __func__, state_to_string(ssif_bmc->state));  			// dev_warn(&ssif_bmc->client->dev, "Warn: Unknown SMBus write command=0x%x", 			// 	 ssif_bmc->part_buf.smbus_cmd); 

或者修改:build/ast2600-default/workspace/sources/linux-aspeed/arch/arm/boot/dts/aspeed/aspeed-ast2600-evb.dts

&i2c4 { 	status = "disabled";  	ssif-bmc@10 { 		compatible = "ssif-bmc"; 		reg = <0x10>; 	}; }; 

不过修改dts!!未验证!!

备注

  • 1.u-boot的编译结果可以查看目录:build/ast2600-default/workspace/sources/u-boot-aspeed-sdk/oe-workdir/build/
  • 2.当前采用的fmc spi芯片是mx66l51235l,要注意一个问题: mtd: spi-nor: fix options for mx66l51235f
  • 3.本节的所有内容的修改,可以参考gitee提交: https://gitee.com/wit_yuan/sdk_v09.01_ast2600/tree/ast2600_porting_base_network/
  • 4.单独更新u-boot的方法:
# setenv gatewayip 10.245.xx.xx # setenv netmask 255.255.255.0 # dhcp # setenv serverip 10.245.xx.xx # tftp 0x83000000 image-u-boot # sf probe 0 # sf update 0x83000000 0 $filesize 
  • 5.单独更新kernel的方法:
# setenv gatewayip 10.245.xx.xx # setenv netmask 255.255.255.0 # dhcp # setenv serverip 10.245.xx.xx # tftp 0x83000000 fitimage # sf probe 0 # sf update 0x83000000 0 $filesize 
  • 6.单独更新bmc的方法:
# setenv gatewayip 10.245.xx.xx # setenv netmask 255.255.255.0 # dhcp # setenv serverip 10.245.xx.xx # tftp 0x83000000 image-bmc # sf probe 0 # sf update 0x83000000 0 $filesize 
  • 7.如果出现编译linux-aspeed报错,但是修改的内容并无问题,可以尝试:
# bitbake -c clean linux-aspeed # bitbake -c build linux-aspeed 

相关内容

热门资讯

笔记本xp系统安装安卓系统,轻... 你有没有想过,在你的老式笔记本上安装一个全新的操作系统呢?想象那台陪伴你多年的老笔记本,突然焕发出青...
安卓操作系统吃内存,安卓操作系... 手机里的安卓操作系统是不是让你感觉内存越来越不够用了?别急,今天就来给你好好分析分析这个让人头疼的问...
王者号ios系统怎么转安卓系统... 你是不是也和我一样,对王者荣耀这款游戏爱得深沉呢?尤其是当你发现某个英雄在安卓系统上玩起来更加得心应...
战神遗迹安卓苹果系统,探索神秘... 亲爱的玩家们,你是否曾在游戏中追寻那些传说中的神秘遗迹?今天,我要带你走进一个充满传奇色彩的领域——...
几何a安卓系统升级,畅享智能出... 你有没有发现,你的几何A最近变得聪明多了?没错,就是那个陪伴你上下班的几何A,它悄悄地升级了安卓系统...
系统最清爽的安卓手机,探索系统... 你有没有想过,拥有一部系统最清爽的安卓手机,就像是拥有了夏日里的一阵清风,让人心情舒畅,操作顺畅?今...
安卓10系统严重有问题,揭秘严... 最近你的安卓手机是不是也遇到了一些让人头疼的问题呢?别急,让我来给你一探究竟,看看安卓10系统到底有...
安卓系统闽政通打不开,“闽政通... 最近是不是有不少小伙伴在使用安卓手机时遇到了一个让人头疼的问题——闽政通打不开?别急,今天就来给你详...
安卓系统有指纹忘了图案,解锁攻... 手机解锁方式千千万,指纹解锁和图案解锁可谓是其中的佼佼者。但有时候,指纹解锁用得太多,导致忘记了图案...
QQ飞车安卓系统怎么换苹果系统... 你是不是也和我一样,对QQ飞车这款游戏爱得深沉呢?不过,最近我发现了一个超级有趣的问题:怎么把QQ飞...
安卓可冻结的系统文件,那些不可... 你知道吗?在安卓的世界里,有一些神秘的文件,它们就像隐藏在深宫中的宝贝,让人既好奇又敬畏。这些文件,...
安卓系统安装需要备份吗,关键指... 你最近是不是在准备给安卓手机升级系统或者安装新应用呢?别急,别急,在这之前,有个小细节你得注意一下—...
高仿ios的安卓系统,带你领略... 你有没有想过,为什么安卓手机那么受欢迎,却还是有人对iOS系统念念不忘呢?其实,现在市面上就有一种神...
安卓系统全能播放器,尽享视听盛... 你有没有发现,手机里总是装满了各种音乐、电影、电视剧,但是找到一个能让你一次性搞定所有播放需求的软件...
在哪里安装安卓系统好,安卓系统... 你有没有想过,为什么安卓系统这么受欢迎呢?它那强大的兼容性和丰富的应用生态,简直让人爱不释手。但是,...
如何自己提升安卓系统,自我提升... 你有没有发现,随着智能手机的普及,安卓系统已经成为了我们生活中不可或缺的一部分呢?但是,你是否想过,...
安卓子系统内存不足,应对策略与... 手机突然卡顿,是不是安卓子系统内存不足在作怪?别急,让我带你一探究竟,揭开这个问题的神秘面纱!一、安...
一鸣安卓系统如何安装,轻松上手... 你有没有想过,给你的安卓手机换换口味?别看它现在运行得风生水起,偶尔来点新鲜玩意儿,岂不是更带劲?今...
安卓操作系统的归属,源自谷歌的... 你有没有想过,那个陪伴你每天刷抖音、玩游戏、处理工作的安卓操作系统,它究竟是谁的孩子呢?今天,就让我...
安卓启动系统设置界面,揭秘安卓... 你有没有发现,每次打开安卓手机,那启动系统设置界面就像是个神秘的宝箱,里面藏着无数的小秘密?今天,就...