首页 > 其他分享 >全志V3S开发(一)-主线uboot移植及适配以太网

全志V3S开发(一)-主线uboot移植及适配以太网

时间:2024-08-24 17:23:43浏览次数:10  
标签:V3S uboot 适配 arm v3s linux dts 以太网 sun8i

一、安装交叉编译器

1. 新建一个交叉编译器的工具目录,我的目录是/home/daemonchen/linux/tool,并在该目录下打开终端。

2. 安装arm-linux交叉编译器gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf-develop-11.0.zip(注意必须必须必须是这个版本,否则后面设置完网络环境会报汇编错误,直接疯狂重启)。百度网盘的下载链接放在下面了,请自取:

通过百度网盘分享的文件:gcc-linaro-6.3.1-2017.05-x86_64_arm...
链接:https://pan.baidu.com/s/1oqwlN_0kv8EXTBGZ7QVMSw?pwd=8888 
提取码:8888 
--来自百度网盘超级会员V6的分享

3. 将下载好的gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf-develop-11.0.zip放在在/home/daemonchen/linux/tool目录下。解压并将其移动到/opt目录下。

sudo unzip gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf-develop-11.0.zip
sudo mv gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf-develop-11.0 /opt/

 4. 使用vim打开/etc/bash.bashrc,并添加交叉编译器到环境变量。

sudo vim /etc/bash.bashrc
# add: PATH="$PATH:/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf-develop-11.0/bin"

更改完成的bash.bashrc如下图所示: 

5. 运行并生效bash.bashrc,并查看交叉编译器版本。

source /etc/bash.bashrc
arm-linux-gnueabihf-gcc -v

正确的编译器版本如下所示:

gcc版本不是这个的话就没有做下去的必要了,后面铁定报错。 

6. 安装设备树编译器。

sudo apt-get install device-tree-compiler

 二、下载uboot

1. 新建一个uboot文件夹,我的目录是/home/daemonchen/linux/V3S/uboot。在该目录下打开终端。

2. 在licheepi的git仓库里面下载v3s-current版本的uboot,需要梯子,我下载过程中总是请求失败,所以直接从页面版git上下载的zip文件。

git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-current

3. 将下载好的u-boot-3s-current.zip解压。

unzip u-boot-3s-current.zip

4. 将解压出的 u-boot-3s-current重命名为u-boot,方便后续操作。

三、uboot的网络适配

1. 由于后面做Linux驱动开发需用使用到nfs和tftp服务,所以需要uboot上的网络能够ping通ubuntu服务器。首先进入uboot文件夹,打开终端,编译默认配置文件Licheepi_Zero_defconfig,并打开图形化配置界面。

make LicheePi_Zero_defconfig
make menuconfig

2. 使能uboot的以太网,按照以下路径进行配置: 

Device Drivers --->
    [*] Network device support --->
       [*] Allwinner Sun8i Ethernet MAC support  

3. 为了下次直接调用该配置,将其保存为Licheepi_MY_Ethernet_defconfig.

make savedefconfig
cp defconfig configs/Licheepi_MY_Ethernet_defconfig

4. 修改sun8i-v3s-licheepi-zero.dts(注意是uboot目录下的,不是linux kernel下的

diff --git a/arch/arm/dts/sun8i-v3s-licheepi-zero.dts b/arch/arm/dts/sun8i-v3s-licheepi-zero.dts
index 3d9168c..b8b9fc3 100644
--- a/arch/arm/dts/sun8i-v3s-licheepi-zero.dts
+++ b/arch/arm/dts/sun8i-v3s-licheepi-zero.dts
@@ -49,6 +49,7 @@
        compatible = "licheepi,licheepi-zero", "allwinner,sun8i-v3s";

        aliases {
+               ethernet0 = &emac;
                serial0 = &uart0;
        };

@@ -81,3 +82,14 @@
        usb0_id_det-gpio = <&pio 5 6 GPIO_ACTIVE_HIGH>;
        status = "okay";
};
+
+&emac {
+       phy = <&phy0>;
+       phy-mode = "mii";
+       allwinner,use-internal-phy;
+       allwinner,leds-active-low;
+       status = "okay";
+       phy0: ethernet-phy@0 {
+               reg = <1>;
+       };
+};

5. 修改sun8i-v3s.dtsi(注意是uboot目录下的,不是linux kernel下的

diff --git a/arch/arm/dts/sun8i-v3s.dtsi b/arch/arm/dts/sun8i-v3s.dtsi
index ebefc0f..cb81dd5 100644
--- a/arch/arm/dts/sun8i-v3s.dtsi
+++ b/arch/arm/dts/sun8i-v3s.dtsi
@@ -96,6 +96,11 @@
                #size-cells = <1>;
                ranges;

+               syscon: syscon@01c00000 {
+                       compatible = "allwinner,sun8i-h3-syscon","syscon";
+                       reg = <0x01c00000 0x34>;
+               };
+
                mmc0: mmc@01c0f000 {
                        compatible = "allwinner,sun7i-a20-mmc";
                        reg = <0x01c0f000 0x1000>;
@@ -208,6 +213,17 @@
                        interrupt-controller;
                        #interrupt-cells = <3>;

+                       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";
@@ -270,6 +286,20 @@
                        status = "disabled";
                };

+               emac: ethernet@1c30000 {
+                       compatible = "allwinner,sun8i-h3-emac";
+                       reg = <0x01c30000 0x104>, <0x01c00030 0x4>;
+                       reg-names = "emac", "syscon";
+                       interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
+                       resets = <&ccu RST_BUS_EMAC>, <&ccu RST_BUS_EPHY>;
+                       reset-names = "ahb", "ephy";
+                       clocks = <&ccu CLK_BUS_EMAC>, <&ccu CLK_BUS_EPHY>;
+                       clock-names = "ahb", "ephy";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
                gic: interrupt-controller@01c81000 {
                        compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
                        reg = <0x01c81000 0x1000>,

6. 保存,退出。 

四、编译Uboot

 1. 使用以下命令编译uboot:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

2. 拷贝生成的u-boot-sunxi-with-spl.bin文件至烧录文件夹/home/daemonchen/linux/V3S/mysys_kernel_5.2.y/

cp u-boot-sunxi-with-spl.bin /home/daemonchen/linux/V3S/mysys_kernel_5.2.y/ -f

五、烧录测试 

1. 进入烧录文件夹下/home/daemonchen/linux/V3S/mysys_kernel_5.2.y/,使用以下命令进行SD卡烧录,烧录前置步骤看全志V3S开发-系统烧录

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

2. 将烧录好的SD卡插入电路板(插上网线),利用SecureCRT进入uboot界面,倒计时结束前回车中断,看到以下log表示网络配置暂时没问题:

3. 我的配置为设置开发板的IP地址为192.168.147.132,子网掩码为255.255.255.0,服务器IP建议手动设置为192.168.147.130,开发板和服务器IP需要在同一网段,子网掩码设置为192.168.147.2(Ubuntu下使用ip route命令查看),最后保存环境变量。

setenv ipaddr 192.168.147.132
setenv gatewayip 192.168.147.2
setenv netmask 255.255.255.0
setenv serverip 192.168.147.130
saveenv

4. SecureCRT下尝试ping一下服务器IP,出现以下log表示uboot的网络配置成功(不正确的交叉编译器版本会报汇编错误,然后重启):

至此主线uboot移植完成!

标签:V3S,uboot,适配,arm,v3s,linux,dts,以太网,sun8i
From: https://blog.csdn.net/Jlinkneeder/article/details/141343568

相关文章

  • Android开发 - (适配器)Adapter类中(蓝牙适配器)BluetoothAdapter实现类解析
    什么是BluetoothAdapterBluetoothAdapter是一个重要的类,用于管理和操作蓝牙功能。它提供了与蓝牙设备进行交互的能力,它代表了本地蓝牙适配器的功能。简单来说,它是你与设备上的蓝牙硬件进行交互的接口。通过BluetoothAdapter,你可以控制蓝牙的开启和关闭,发现附近的蓝牙设备,管理......
  • 京东小程序折叠屏适配探索
    前言随着近年来手机行业的飞速发展,手机从功能机进入到智能机,手机屏幕占比也随着技术和系统的进步越来越大,特别是Android10推出以后,折叠屏逐渐成为Android手机发展的趋势。图1Android手机屏幕发展趋势京东小程序近年来也支持了越来越多的业务和应用,做好小程序的折叠屏的适配......
  • 国产化适配——银河麒麟V10(1)
    前言为响应国家“信创”建设,公司最近在搞国产化适配,我刚好负责这搞一部分,做个记录吧。主要包括三块:国产服务器操作系统银河麒麟V10,国产数据库人大金仓kingbase,中间件Tongweb。 这一期记录银河麒麟适配中遇到的一些问题。系统版本:KylinLinuxAdvancedServerV10(Sword)......
  • Apache SeaTunnel数据处理引擎适配的演进和规划
    作者|ChaoTian(tyrantlucifer),ApacheSeaTunnelPMCMember摘要ApacheSeaTunnel作为一个高性能数据同步工具,以其高效的数据处理能力,为数据集成领域带来了创新。在引擎上,ApacheSeaTunnel除了支持自身的Zeta引擎外,还支持Spark和Flink。在2024年的CommunityOverCodeAsia,Apa......
  • 车载以太网交换机入门基本功(3)—VLAN 转发
        在《车载以太网交换机入门基本功(2)》中提到,报文通过携带Tag字段,表明报文所属的VLAN。本文将介绍携带Tag报文在VLAN下的转发过程。而在实际转发过程中,交换机的端口属性起到关键作用。交换机端口属性    交换机的端口属性包括三大属性:VID、PVID、Tag/Untag。VI......
  • VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 标准版和厂商定制版,已适配主流品牌服务
    VMwareESXi8.0U3macOSUnlocker&OEMBIOS标准版和厂商定制版ESXi8.0U3标准版,Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)、Cisco(思科)、Hitachi(日立)、Fujitsu(富士通)、NEC(日电)定制版、Huawei(华为)OEM定制版请访问原文链接:https://sysi......
  • Android 11.0 通过系统属性适配多种分辨率开机动画功能实现
    1.前言 在11.0的系统ROM定制化开发中,在关于开机动画这部分由于产品需要适配多种分辨率,所以就需要在出rom固件的时候,就需要根据系统属性来适配显示哪种分辨率开机动画,所以接下来就来看怎么设置系统属性,然后在开机动画阶段怎么实现这个功能2.通过系统属性适配多种分辨率开......
  • 万兆以太网协议栈的FPGA实现(三):万兆网CRC
    参考:基于FPGA的千兆以太网的实现(3)_以太网crc计算-CSDN博客 CRC802.11来自将8位数据同时输入,再输出32位CRC数值;其能成功实现的原因就是因为并行化。(下路仅是部分的计算步骤)结合千兆网CRC的计算思想,我们只需要把第一轮单字节CRC的结果作为第二轮CRC的开始,就可以完成任务。......
  • RK3568调试YT8531单网口千兆以太网PHY芯片,GAMC调试
    异常现象当硬件上使用YT8531替代Realtek瑞昱的RTL8211之后,出现系统能够正确识别ETHx,也能设置IP地址,但是外部无法ping成功或者重启后IP地址还会丢失的问题;硬件排查思路检查电源:输入3.3v;输出1.1v,RGMII的电平配置是否如设计预期(1.8v/2.5v/3.3v),尤其RGMII电平配置为3.3......
  • 设计模式 适配器模式
    适配器模式适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式的结构适配器模式通常涉及以下几个角色:目标(Target):定义客户端所期望的接口。适配者(Adaptee):定义一个已经存在......