全志A10主板移植Linux

全志A10主板移植主线Uboot和Linux

背景

板子为小黄鱼上收到的一块全志A10的广告机主板,想对这张板子移植下最新的主线Uboot和Linux内核。

原始状态

Uboot

环境变量

boot_fastboot=fastboot
boot_normal=sunxi_flash read 40007800 boot;boota 40007800
boot_recovery=sunxi_flash read 40007800 recovery;boota 40007800
bootcmd=run setargs_nand boot_normal
bootdelay=1
console=ttyS0,115200
init=/init
loglevel=5
mac=00:00:00:00:00:00
mmc_root=/dev/mmcblk0p7
nand_root=/dev/nandd
partitions=bootloader@nanda:env@nandb:boot@nandc:system@nandd:data@nande:misc@nandf:recovery@nandg:cache@nandh:private@nandi:sysrecovery@nandj:UDISK@nandk
setargs_mmc=setenv bootargs console=${console} root=${mmc_root} init=${init} loglevel=${loglevel} mac_addr=${mac} partitions=${partitions}
setargs_nand=setenv bootargs console=${console} root=${nand_root} init=${init} loglevel=${loglevel} mac_addr=${mac} partitions=${partitions}
stderr=serial
stdin=serial
stdout=serial

移植Uboot

  1. 使用configs/A10-OLinuXino-Lime_defconfig,默认配置,修改设备树sun4i-a10-olinuxino-lime.dts

    /*
     * Copyright 2014 - Hans de Goede <hdegoede@redhat.com>
     *
     * This file is dual-licensed: you can use it either under the terms
     * of the GPL or the X11 license, at your option. Note that this dual
     * licensing only applies to this file, and not this project as a
     * whole.
     *
     *  a) This file is free software; you can redistribute it and/or
     *     modify it under the terms of the GNU General Public License as
     *     published by the Free Software Foundation; either version 2 of the
     *     License, or (at your option) any later version.
     *
     *     This file is distributed in the hope that it will be useful,
     *     but WITHOUT ANY WARRANTY; without even the implied warranty of
     *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     *     GNU General Public License for more details.
     *
     * Or, alternatively,
     *
     *  b) Permission is hereby granted, free of charge, to any person
     *     obtaining a copy of this software and associated documentation
     *     files (the "Software"), to deal in the Software without
     *     restriction, including without limitation the rights to use,
     *     copy, modify, merge, publish, distribute, sublicense, and/or
     *     sell copies of the Software, and to permit persons to whom the
     *     Software is furnished to do so, subject to the following
     *     conditions:
     *
     *     The above copyright notice and this permission notice shall be
     *     included in all copies or substantial portions of the Software.
     *
     *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
     *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
     *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
     *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     *     OTHER DEALINGS IN THE SOFTWARE.
     */
    
    /dts-v1/;
    #include "sun4i-a10.dtsi"
    #include "sunxi-common-regulators.dtsi"
    
    #include <dt-bindings/gpio/gpio.h>
    
    / {
    	model = "Olimex A10-OLinuXino-LIME";
    	compatible = "olimex,a10-olinuxino-lime", "allwinner,sun4i-a10";
    
    	aliases {
    		serial0 = &uart0;
    	};
    
    	chosen {
    		stdout-path = "serial0:115200n8";
    	};
    
    	// hdmi-connector {
    	// 	compatible = "hdmi-connector";
    	// 	type = "a";
    
    	// 	port {
    	// 		hdmi_con_in: endpoint {
    	// 			remote-endpoint = <&hdmi_out_con>;
    	// 		};
    	// 	};
    	// };
    
    	// leds {
    	// 	compatible = "gpio-leds";
    	// 	pinctrl-names = "default";
    	// 	pinctrl-0 = <&led_pins_olinuxinolime>;
    
    	// 	led {
    	// 		label = "a10-olinuxino-lime:green:usr";
    	// 		gpios = <&pio 7 2 GPIO_ACTIVE_HIGH>;
    	// 		default-state = "on";
    	// 	};
    	// };
    };
    
    &ahci {
    	target-supply = <&reg_ahci_5v>;
    	status = "okay";
    };
    
    &cpu0 {
    	/*
    	 * The A10-Lime is known to be unstable when running at 1008 MHz
    	 */
    	operating-points =
    		/* kHz	  uV */
    		<912000	1350000>,
    		<864000	1300000>,
    		<624000	1250000>;
    };
    
    &de {
    	status = "okay";
    };
    
    &ehci0 {
    	status = "okay";
    };
    
    &ehci1 {
    	status = "okay";
    };
    
    &emac {
    	phy-handle = <&phy1>;
    	status = "okay";
    };
    
    &emac_sram {
    	status = "okay";
    };
    
    // &hdmi {
    // 	status = "okay";
    // };
    
    // &hdmi_out {
    // 	hdmi_out_con: endpoint {
    // 		remote-endpoint = <&hdmi_con_in>;
    // 	};
    // };
    
    &i2c0 {
    	status = "okay";
    
    	axp209: pmic@34 {
    		compatible = "x-powers,axp209";
    		reg = <0x34>;
    		interrupts = <0>;
    
    		interrupt-controller;
    		#interrupt-cells = <1>;
    	};
    };
    
    // &i2c1 {
    // 	status = "okay";
    
    // 	eeprom: eeprom@50 {
    // 		compatible = "atmel,24c16";
    // 		reg = <0x50>;
    // 		pagesize = <16>;
    // 	};
    // };
    
    &mdio {
    	status = "okay";
    
    	phy1: ethernet-phy@1 {
    		reg = <1>;
    	};
    };
    
    &mmc0 {
    	vmmc-supply = <&reg_vcc3v3>;
    	bus-width = <4>;
    	cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
    	status = "okay";
    };
    
    &ohci0 {
    	status = "okay";
    };
    
    &ohci1 {
    	status = "okay";
    };
    
    &otg_sram {
    	status = "okay";
    };
    
    // &pio {
    // 	led_pins_olinuxinolime: led-pin {
    // 		pins = "PH2";
    // 		function = "gpio_out";
    // 		drive-strength = <20>;
    // 	};
    // };
    
    // &reg_ahci_5v {
    // 	gpio = <&pio 2 3 GPIO_ACTIVE_HIGH>;
    // 	status = "okay";
    // };
    
    // &reg_usb0_vbus {
    // 	status = "okay";
    // };
    
    // &reg_usb1_vbus {
    // 	status = "okay";
    // };
    
    // &reg_usb2_vbus {
    // 	status = "okay";
    // };
    
    &uart0 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&uart0_pb_pins>;
    	status = "okay";
    };
    
    // &usb_otg {
    // 	dr_mode = "otg";
    // 	status = "okay";
    // };
    
    // &usbphy {
    // 	usb0_id_det-gpios = <&pio 7 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; /* PH4 */
    // 	usb0_vbus_det-gpios = <&pio 7 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; /* PH5 */
    // 	usb0_vbus-supply   = <&reg_usb0_vbus>;
    // 	usb1_vbus-supply = <&reg_usb1_vbus>;
    // 	usb2_vbus-supply = <&reg_usb2_vbus>;
    // 	status = "okay";
    // };
    
    
  2. 编译得到u-boot-sunxi-with-spl.bin,烧写到SD卡8k偏移处

    dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1k seek=8
    
  3. 插入SD卡,上电打印

    image-20240904002813293

移植Linux

  1. 使用arch/arm/configs/sunxi_defconfig默认配置

  2. 设备树

    /dts-v1/;
    #include "sun4i-a10.dtsi"
    #include "sunxi-common-regulators.dtsi"
    
    #include <dt-bindings/gpio/gpio.h>
    
    / {
    	model = "Olimex A10-OLinuXino-LIME";
    	compatible = "olimex,a10-olinuxino-lime", "allwinner,sun4i-a10";
    
    	aliases {
    		serial0 = &uart0;
    	};
    
    	chosen {
    		stdout-path = "serial0:115200n8";
    	};
    
    	// hdmi-connector {
    	// 	compatible = "hdmi-connector";
    	// 	type = "a";
    
    	// 	port {
    	// 		hdmi_con_in: endpoint {
    	// 			remote-endpoint = <&hdmi_out_con>;
    	// 		};
    	// 	};
    	// };
    
    	leds {
    		compatible = "gpio-leds";
    		led_red {
    			label = "led-red";
    			gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>;
    			default-state = "off";
    		};
        led_blue {
    			label = "led-blue";
    			gpios = <&pio 7 20 GPIO_ACTIVE_HIGH>;
    			default-state = "on";
    		};
    	};
    };
    
    // &ahci {
    // 	target-supply = <&reg_ahci_5v>;
    // 	status = "okay";
    // };
    
    &cpu0 {
    	/*
    	 * The A10-Lime is known to be unstable when running at 1008 MHz
    	 */
    	operating-points =
    		/* kHz	  uV */
    		// <912000	1350000>,
    		<864000	1300000>,
    		<624000	1250000>;
    };
    
    &de {
    	status = "okay";
    };
    
    &ehci0 {
    	status = "okay";
    };
    
    &ehci1 {
    	status = "okay";
    };
    
    &emac {
    	phy-handle = <&phy1>;
    	status = "okay";
    };
    
    &emac_sram {
    	status = "okay";
    };
    
    // &hdmi {
    // 	status = "okay";
    // };
    
    // &hdmi_out {
    // 	hdmi_out_con: endpoint {
    // 		remote-endpoint = <&hdmi_con_in>;
    // 	};
    // };
    
    &i2c0 {
    	status = "okay";
    
    	axp209: pmic@34 {
    		compatible = "x-powers,axp209";
    		reg = <0x34>;
    		interrupts = <0>;
    
    		interrupt-controller;
    		#interrupt-cells = <1>;
    	};
    };
    
    // &i2c1 {
    // 	status = "okay";
    
    // 	eeprom: eeprom@50 {
    // 		compatible = "atmel,24c16";
    // 		reg = <0x50>;
    // 		pagesize = <16>;
    // 	};
    // };
    
    &mdio {
    	status = "okay";
    
    	phy1: ethernet-phy@1 {
    		reg = <1>;
    	};
    };
    
    &mmc0 {
    	vmmc-supply = <&reg_vcc3v3>;
    	bus-width = <4>;
    	cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
    	status = "okay";
    };
    
    &ohci0 {
    	status = "okay";
    };
    
    &ohci1 {
    	status = "okay";
    };
    
    &otg_sram {
    	status = "okay";
    };
    
    &pio {
    	led_pins_olinuxinolime: led-pin {
    		pins = "PH10","PH20";
    		function = "gpio_out";
    		drive-strength = <20>;
    	};
    };
    
    // &reg_ahci_5v {
    // 	gpio = <&pio 2 3 GPIO_ACTIVE_HIGH>;
    // 	status = "okay";
    // };
    
    &reg_usb0_vbus {
    	status = "okay";
    };
    
    &reg_usb1_vbus {
    	status = "okay";
    };
    
    &reg_usb2_vbus {
    	status = "okay";
    };
    
    &uart0 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&uart0_pb_pins>;
    	status = "okay";
    };
    
    // &usb_otg {
    // 	dr_mode = "otg";
    // 	status = "okay";
    // };
    
    &usbphy {
    	// usb0_id_det-gpios = <&pio 7 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; /* PH4 */
    	// usb0_vbus_det-gpios = <&pio 7 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; /* PH5 */
    	// usb0_vbus-supply   = <&reg_usb0_vbus>;
    	// usb1_vbus-supply = <&reg_usb1_vbus>;
    	// usb2_vbus-supply = <&reg_usb2_vbus>;
    	status = "okay";
    };
    
    
  3. 编译得到zImagesun4i-a10-olinuxino-lime.dtb

  4. 启动

    image-20240905222434497

posted @ 2024-11-08 01:47  LM358  阅读(130)  评论(0)    收藏  举报