编译和烧录SPI-NOR-Flash的V3s核心板(1):u-boot

核心板带有V3S SoC一颗,内置64MByte DDR RAM,MX25L25645G Flash一颗,EPHY已经连接,但是没有sunxi-fel配置,Flash也没有MISO开关。

从头开始创建这个核心板的image。

开发环境

开发环境如上图。使用核心板的DEBUG接口和以太网口,通过USB-UART小板接到上位机的USB口,网线和小交换机接好。上位机运行ubuntu 18.04 x64,创建了一个基于tftpd的TFTP服务器,使用VSCode做源代码编辑。

连好以后,确认各部分连接无误,开始搞起吧。

编译u-boot

u-boot版本

下载u-boot 2017.01-rc2。建立一个文件夹

.../v3s/

然后将u-boot-2017-01-rc2.tar.gz解压到

.../v3s/u-boot

目录下。

设置u-boot默认环境变量

按照 “SPI Flash 系统编译 - Sipeed Wiki” 设置好启动环境变量,感谢Sipeed Wiki的详细描述。

Flash分区在CONFIG_BOOTARGS中,这个设置不能错,要和内核的分区表准确对应才能顺利启动内核。

设置u-boot支持ethernet

因为我的板子没有sunxi-fel接口,因此必须在u-boot中使用带有网络支持的功能,才能使用tftp进行image的下载。参考网上大侠的做法,先修改源码如下。

修改 .../v3s/u-boot/arch/arm/dts/sun8i-v3s-licheepi-zero.dts

修改后的代码粘贴如下。

/*
 * Copyright (C) 2016 Icenowy Zheng <icenowy@aosc.xyz>
 *
 ......
 ......
 */

/dts-v1/;
#include "sun8i-v3s.dtsi"
#include "sunxi-common-regulators.dtsi"

/ {
	model = "Lichee Pi Zero";
	compatible = "licheepi,licheepi-zero", "allwinner,sun8i-v3s";

	aliases {
		serial0 = &uart0;
		spi0 = &spi0;
        /*
			For network support to use TFTP
			Commented by Luoyuan@2023-05-30
		*/
        ethernet0 = &emac;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};
};

&mmc0 {
	pinctrl-0 = <&mmc0_pins_a>;
	pinctrl-names = "default";
	broken-cd;
	bus-width = <4>;
	vmmc-supply = <&reg_vcc3v3>;
	status = "okay";
};

/*
    For SPI-NOR-FLASH support
    Commented by Luoyuan@2023-05-29
*/
&spi0 {
	status = "okay";
};

&uart0 {
	pinctrl-0 = <&uart0_pins_a>;
	pinctrl-names = "default";
	status = "okay";
};

&usb_otg {
	dr_mode = "otg";
	status = "okay";
};

&usbphy {
	usb0_id_det-gpio = <&pio 5 6 GPIO_ACTIVE_HIGH>;
	status = "okay";
};

&ohci0 {
	dr_mode = "host";
	status = "okay";
};

&ehci0 {
	dr_mode = "host";
	status = "okay";
};

/*
    For network file transfer support using TFTP to download
    flash image.
    
    Commented by Luoyuan@2023-05-26
*/
&emac {
    phy = <&phy0>;
    phy-mode = "mii";
    allwinner,use-internal-phy;
    allwinner,leds-active-low;
    status = "okay";
    phy0: ethernet-phy@0 {
        reg = <1>;
    };
};



请注意我所作的几项注释:

ethernet0 = &emac

这里为emac表述段起了个别名”ethernet0“,为了将来在其它文件中进行引用。

&spi0

这里添加了对spi接口的描述,仅有一个标识:status=“okay”。

&emac

这个是关键,emac是ethnernet0的引用主体。

修改 .../v3s/arch/arm/dts/sun8i-v3s.dts

dts分层级描述设备/端口。找到soc的pio段,在uart0_pins_a: uart@0 {} 之前加入emac_rgmii_pins的描述代码,如下所示。

    soc {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

        ...
        ...
        ...

        pio: pinctrl@01c20800 {
			compatible = "allwinner,sun8i-v3s-pinctrl";
			reg = <0x01c20800 0x400>;
			interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
			clock-names = "apb", "hosc", "losc";
			gpio-controller;
			#gpio-cells = <3>;
			interrupt-controller;
			#interrupt-cells = <3>;
            
            /*
                Ethernet support in u-boot
                Commented by Luoyuan@2023-05-29
            */
            emac_rgmii_pins: emac0@0 {
                allwinner,pins = "PD0", "PD1", "PD2", "PD3",
                                 "PD4", "PD5", "PD7",
                                 "PD8", "PD9", "PD10",
                                 "PD12", "PD13", "PD15",
                                 "PD16", "PD17";
                allwinner,function = "emac";
                allwinner,drive = <SUN4I_PINCTRL_40_MA>;
                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
            };

			uart0_pins_a: uart0@0 {
				pins = "PB8", "PB9";
				function = "uart0";
				bias-pull-up;
			};

            ...
            ...
            ...
        };
    }

make menuconfig

在ubuntu命令行,cd .../v3s/u-boot,运行如下命令。

make LicheePi_Zero_defconfig

make ARCH=arm menuconfig

在menuconfig中,设置对SPI-NOR-Flash的支持和对ethernet的支持。

通用设置

Architecture select,不用说肯定是 ARM architecture。

ARM architecture部分,由LicheePi_Zero_defconfig指定了,注意图中红框内所选项就好,其它的的选项我没有修改。

 delay in seconds before automatically booting,默认值为2,我改成了5,也就是说在启动过程中用户进入到u-boot前等待的秒数,改动的原因是默认等待2秒,有时会一闪而过。不改也是可以的。

SPL / TPL

这部分选项挺多的,就不截图了,确保如下选项为[*]。

[*]    Enable SPL

[*]    Support GPIO

[*]    Suport common libraries

[*]    Support disk partitions

[*]    Support generic libraries

[*]    Support MMC

[*]    Support power drivers

[*]    Support serial

[*]    Support SPI flash drivers

Networking support

这个选项中,选中[*] Control TFTP timeout and count through environment。

Device Drivers

选中SPI Flash Support,如下图进行设置,请注意,选中的可以更多,但至少一定要包含图中所选的。

其中SPI flash Bank/Extended address register support是对超过16MByte的flash的支持,而MX25L25645G的容量是32MB,因此这个选项是必要的,否则的话,最大只能访问16MB的flash。

Macronix SPI flash support 和 Winbond SPI flash support 是必要的,这两个都选可以最大程度地兼容起来。

 选中[*] Network device support ---> [*] Allwinner Sun8i Ethernet MAC support

选中[*] Serial drivers --->

[*]    Require a serial port for console  +

[*]    Provide a serial driver +

[*]    Provide a serial driver in SPL +

-*-    NS 16550 UART or compatible

如下图所示。

 选中SPI Support ---> [*] Enable Driver Model for SPI drivers + [*] Allwinner SPI driver

编译u-boot

使用make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

开始编译,如果一切顺利的话,就在当前目录下生成了一个名为

u-boot-sunxi-with-spl.bin

的文件,这就是我们需要的u-boot可执行文件。

参考文献:

SPI Flash 系统编译 - Sipeed Wiki

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 编译mt7621配置的U-Boot需要进行以下步骤: 首先,确认已经准备好编译环境,包括安装好交叉编译工具链和相关依赖库。 然后,从U-Boot官方仓库中获取最新的源代码。可以使用git命令进行克隆,例如: git clone https://github.com/u-boot/u-boot.git 接下来,切换到代码目录并进入配置界面,执行以下命令: cd u-boot make menuconfig 在配置界面中,选择"MTK",然后选择"MTK_MT7621"作为目标平台。根据需要,可以进行其他选项的配置,如串口、网络等。 配置完成后,保存退出配置界面。然后,执行以下命令进行编译: make CROSS_COMPILE=<交叉编译工具链前缀> 编译过程可能需要一段时间,取决于计算机性能和代码规模。 编译完成后,可以得到u-boot.bin文件作为编译结果。该文件可以烧录到MT7621芯片的Flash中,用于启动设备。 以上是编译mt7621配置的U-Boot的大致步骤。根据具体需求,可能还需要进行其他配置和调整。在进行编译前,建议查阅U-Boot的官方文档和相关资料,以便更详细地了解配置和编译过程。 ### 回答2: 编译 U-Boot for MT7621 配置需要先准备编译环境和相关工具链。以下是编译 MT7621 配置的步骤: 1. 首先,确保你的系统上已经安装了交叉编译工具链。可以通过执行以下命令来检查是否已安装交叉编译工具链: ``` arm-openwrt-linux-gcc -v ``` 如果显示出工具链的版本信息,则表示已经安装成功。 2. 下载 U-Boot 的源码。你可以通过 Git 或者下载压缩包的方式获取源码。例如,使用 Git 命令来克隆 U-Boot 的仓库: ``` git clone https://github.com/u-boot/u-boot.git ``` 3. 进入源码目录,并创建编译配置文件。执行以下命令: ``` cd u-boot make mt7621_xxx_config ``` 其中,`mt7621_xxx_config` 是针对你的具体设备的配置文件,例如 `mt7621_rfb_config` 或 `mt7621_xxx_config` 等。你可以查阅相关文档来确定正确的配置文件。 4. 根据配置文件生成编译规则。执行以下命令: ``` make oldconfig ``` 根据你的需求来回答一些提示问题。默认选项通常是可以满足大多数需求的。 5. 开始编译。执行以下命令: ``` make ``` 编译时间会根据你的机器性能和代码大小而不同。最终编译产生的 U-Boot 可执行文件将位于生成文件夹中。 完成上述步骤后,你将获得一个适用于 MT7621 的 U-Boot 可执行文件。你可以将它用于你的项目中,并在启动过程中加载它。当然,在编译之前,你可能需要修改一些配置文件,以确保 U-Boot 适配你的具体硬件环境。 ### 回答3: 要编译 mt7621 的 u-boot 需要进行一些配置。 首先,你需要下载 u-boot 的源代码。可以从官方网站或者 GitHub 上找到 mt7621 相关的 u-boot 仓库,并下载代码至你的开发环境中。 接下来,你需要进入 u-boot 的源代码目录。使用终端命令行工具进入该目录。 在源代码目录中,你可以找到一个名为 `configs` 的文件夹,其中包含了不同平台的配置文件。你需要找到一个名为 `mt7621_bpir2_defconfig` 的文件,这是针对 mt7621 平台的默认配置文件。 如果你想进行自定义配置,可复制该文件,并在复制的文件上进行修改。你可以使用一个文本编辑器打开配置文件,找到需要修改的选项,并进行相应的修改。例如,你可以修改串口配置、内存配置、网络协议等选项,以适配你的具体需求。 完成修改后,你可以保存文件,并返回到源代码的根目录。 最后,你需要运行编译命令来生成可执行的 u-boot 映像文件。通常情况下,你可以通过运行 `make` 命令来进行编译编译过程可能会耗费一些时间,请耐心等待。 当编译完成后,你可以在源代码目录下找到生成的 u-boot 映像文件。该文件一般以 `u-boot.bin` 或者 `u-boot.img` 的形式存在。 编译完成后,你可以将生成的 u-boot 映像文件烧录到 mt7621 平台的 Flash 存储器中,以替换原有的 u-boot 程序。 总而言之,编译 mt7621 的 u-boot 需要下载源代码、进行配置修改,并通过编译命令生成 u-boot 映像文件。最后,将生成的映像文件烧录到目标平台中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核老骆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值