一、安装交叉编译器
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