【全志平臺】dts內容如何最快導入到機器中

【全志平臺】dts內容如何最快導入到機器中


方法四:編譯kernel,pack,燒錄工具不選擇任何分區是最快的方法。



  • 實驗目的:dts內容如何最快導入到機器中

  • 關鍵字:dts

  • 實驗平臺:全志T7-android

  • 步驟:試驗各種已知方法,來導入dts到機器中

    1. 修改dts後編譯kernel 和 android 通過刷機軟件燒錄整包內容
    2. 修改dts後編譯kernel ,dd導入boot.img到boot分區
    3. 修改dts後pack, dd導入u-boot.fex到mmcblk0分區
      步驟2/3,來確認dts會放在哪個分區。
  • 試驗前準備:修改sun8iw17p1\configs\default\env.cfg文件:bootdelay=2以便能進入boot

  • 試驗工具:Uboot FDT,通過此工具來判斷導入的內容是否奏效。
    Uboot FDT用法:

      # 查看當前dts中所有內容項
      fdt list /aliases  
      #列出其中一項(nand0)中的內容
      fdt list nand0
    

eg:

sunxi#fdt list /aliases

aliases {
        serial0 = "/soc@01c00000/uart@01c28000";
       ..............
        mmc0 = "/soc@01c00000/sdmmc@01c0f000";
        mmc2 = "/soc@01c00000/sdmmc@01C11000";
        nand0 = "/soc@01c00000/nand0@01c03000";
        disp = "/soc@01c00000/disp@01000000";
        lcd0 = "/soc@01c00000/lcd0@01c0c000";
        hdmi = "/soc@01c00000/hdmi@01ee0000";
        pwm = "/soc@01c00000/pwm@01c21400";
        boot_disp = "/soc@01c00000/boot_disp";
};


sunxi#fdt list nand0
nand0@01c03000 {
        compatible = "allwinner,sun50i-nand";
        device_type = "nand0";
        reg = <0x00000000 0x01c03000 0x00000000 0x00001000>;
        ..................
        pinctrl-names = "default", "sleep";
        pinctrl-1 = <0x00000081>;
};

注意:修改的文件是\lichee\linux-3.10\arch\arm\boot\dts\sun8iw17p1-carvout.dtsi

方法一:全編譯整包燒錄

  • 修改sun8iw17p1-carvout.dtsi文件中uart1
uart1: uart@05000400 {
    compatible = "allwinner,sun8i-uart";
    device_type = "uart1";
    reg = <0x0 0x05000400 0x0 0x400>;
    interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&clk_uart1>;
    cshang = <3>; /*增加cshang項*/
    pinctrl-names = "cshang", "sleep";/*修改名字*/
    pinctrl-0 = <&uart1_pins_a>;
    pinctrl-1 = <&uart1_pins_b>;
    uart1_port = <1>;
    uart1_type = <4>;
    use_dma = <1>;
    status = "disabled";
};
  • 測試結果:
sunxi#fdt list serial1
uart@05000400 {
	compatible = "allwinner,sun8i-uart";
	device_type = "uart1";
	reg = <0x00000000 0x05000400 0x00000000 0x00000400>;
	interrupts = <0x00000000 0x0000003d 0x00000004>;
	clocks = <0x00000022>;
	cshang = <0x00000003>;
	pinctrl-names = "cshang", "sleep";
	uart1_port = <0x00000001>;
	uart1_type = <0x00000002>;
	use_dma = <0x00000001>;
	status = "disabled";
	pinctrl-0 = <0x00000122>;
	pinctrl-1 = <0x00000123>;
};
  • 結論:全編譯整包燒錄方法試驗成功,可以把修改的dts內容導入到機器中。

方法二:編譯kernel ,dd導入boot.img

注意:pack不會影響kernel下的boot.img

  • 修改內容:
uart1: uart@05000400 {
    compatible = "allwinner,sun8i-uart";
    device_type = "uart1";
    reg = <0x0 0x05000400 0x0 0x400>;
    interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&clk_uart1>;
    cshang = <4>;/*數值改爲4*/
    pinctrl-names = "cshang4", "sleep";/*名字改爲cshang4*/
    pinctrl-0 = <&uart1_pins_a>;
    pinctrl-1 = <&uart1_pins_b>;
    uart1_port = <1>;
    uart1_type = <4>;
    use_dma = <1>;
    status = "disabled";
};
  • 測試流程:
    1. 編譯kernel
    2. 把編譯出來的boot.img導入到boot分區
E:\cmder_mini
λ adb spush Z:\t7\android-N\t7-p1\lichee\linux-3.10\output\boot.img /mnt/udisk/boot.img
* daemon started successfully
Z:\t7\android-N\t7-p1\lichee\linux-3.10\output\boot.img: 1 file pushed. 5.1 MB/s (16443392 bytes in 3.085s)

E:\cmder_mini
λ adb pshell dd if=/mnt/udisk/boot.img of=/dev/block/by-name/boot
32116+0 records in
32116+0 records out
16443392 bytes transferred in 2.233 secs (7363811 bytes/sec)

E:\cmder_mini
λ adb reboot
3. 進入uboot查看修改
sunxi#fdt list serial1
uart@05000400 {
	compatible = "allwinner,sun8i-uart";
	device_type = "uart1";
	reg = <0x00000000 0x05000400 0x00000000 0x00000400>;
	interrupts = <0x00000000 0x0000003d 0x00000004>;
	clocks = <0x00000022>;
	cshang = <0x00000003>;
	pinctrl-names = "cshang", "sleep";
	uart1_port = <0x00000001>;
	uart1_type = <0x00000002>;
	use_dma = <0x00000001>;
	status = "disabled";
	pinctrl-0 = <0x00000122>;
	pinctrl-1 = <0x00000123>;
};
  • 結果:數值和名字沒有發生改變。
  • 結論:此方法失敗,編譯kernel ,dd導入boot.img不能改變機器中的dts內容。

方法三:pack, dd導入u-boot.fex

注意:pack會重新生成u-boot.fex,編譯kernel不會影響u-boot.fex

  • 修改內容:
uart1: uart@05000400 {
    compatible = "allwinner,sun8i-uart";
    device_type = "uart1";
    reg = <0x0 0x05000400 0x0 0x400>;
    interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&clk_uart1>;
    cshang = <5>;/*數值改爲5*/
    pinctrl-names = "cshang5", "sleep";/*名字改爲cshang5*/
    pinctrl-0 = <&uart1_pins_a>;
    pinctrl-1 = <&uart1_pins_b>;
    uart1_port = <1>;
    uart1_type = <4>;
    use_dma = <1>;
    status = "disabled";
};
  • 測試流程:
    1. pack
    2. 把pack出來的u-boot.fex導入到機器
E:\cmder_mini
λ adb push Z:\t7\android-N\t7-p1\lichee\tools\pack\out\u-boot.fex /mnt/udisk/u-boot.fex
adb server version (31) doesn't match this client (41); killing...
* daemon started successfully
Z:\t7\android-N\t7-p1\lichee\tools\pack\out\u-boot.fex: 1 file pushed. 4.7 MB/s (950272 bytes in 0.194s)

E:\cmder_mini
λ adb shell
t7-p1:/ # echo '0' > "/sys/block/mmcblk0boot1/force_ro"
t7-p1:/ # dd if=/mnt/udisk/u-boot.fex of=/dev/block/mmcblk0 bs=512 count=64 seek=32800
64+0 records in
64+0 records out
32768 bytes transferred in 0.006 secs (5461333 bytes/sec)
t7-p1:/ # dd if=/mnt/udisk/u-boot.fex of=/dev/block/mmcblk0 bs=512 count=64 seek=24576
64+0 records in
64+0 records out
32768 bytes transferred in 0.004 secs (8192000 bytes/sec)
t7-p1:/ # reboot
  • 結果:機器重啓後直接進入強制刷機模式。
  • 結論:此方法失敗,pack, dd導入u-boot.fex此方法無效。

方法四:編譯kernel,extract-bsp,pack,燒錄工具不選擇任何分區

  • 修改內容
uart1: uart@05000400 {
    compatible = "allwinner,sun8i-uart";
    device_type = "uart1";
    reg = <0x0 0x05000400 0x0 0x400>;
    interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&clk_uart1>;
    cshang = <6>;/*修改數字爲6*/
    pinctrl-names = "cshang6", "sleep";/*修改名字爲cshang6*/
    pinctrl-0 = <&uart1_pins_a>;
    pinctrl-1 = <&uart1_pins_b>;
    uart1_port = <1>;
    uart1_type = <4>;
    use_dma = <1>;
    status = "disabled";
};
  • 試驗流程
    1. 編譯kernel
    2. extract-bsp
    3. pack
    4. 燒錄工具不選擇任何分區,至燒錄boot0、boot1。
    5. 進入uboot查看修改
  • 結果:成功
sunxi#fdt list serial1
uart@05000400 {
	compatible = "allwinner,sun8i-uart";
	device_type = "uart1";
	reg = <0x00000000 0x05000400 0x00000000 0x00000400>;
	interrupts = <0x00000000 0x0000003d 0x00000004>;
	clocks = <0x00000022>;
	cshang = <0x00000006>;
	pinctrl-names = "cshang6", "sleep";
	uart1_port = <0x00000001>;
	uart1_type = <0x00000002>;
	use_dma = <0x00000001>;
	status = "disabled";
	pinctrl-0 = <0x00000122>;
	pinctrl-1 = <0x00000123>;
};

省去其中編譯kernel,extract-bsp再嘗試:失敗!

  • 結論:上面的一步都不能少,否則失敗!

試驗結論

方法四:編譯kernel,extract-bsp,pack,燒錄工具不選擇任何分區是最快的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章