<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                概要: 本文主要介紹Uboot的結構,menuconfig里的常見配置選項,編譯步驟等 # 1.Uboot的基本結構 * 下面來看看該uboot中的目錄結構 ~~~ ├── api 存放uboot提供的API接口函數 ├── arch 平臺相關的部分我們只需要關心這個目錄下的ARM文件夾 │ ├──arm │ │ └──cpu │ │ │ └──armv7 │ │ └──dts │ │ │ └──*.dts 存放設備的dts,也就是設備配置相關的引腳信息 ├── board 對于不同的平臺的開發板對應的代碼 ├── cmd 顧名思義,大部分的命令的實現都在這個文件夾下面。 ├── common 公共的代碼 ├── configs 各個板子的對應的配置文件都在里面,我們的Lichee配置也在里面 ├── disk 對磁盤的一些操作都在這個文件夾里面,例如分區等。 ├── doc 參考文檔,這里面有很多跟平臺等相關的使用文檔。 ├── drivers 各式各樣的驅動文件都在這里面 ├── dts 一種樹形結構(device tree)這個應該是uboot新的語法 ├── examples 官方給出的一些樣例程序 ├── fs 文件系統,uboot會用到的一些文件系統 ├── include 頭文件,所有的頭文件都在這個文件夾下面 ├── lib 一些常用的庫文件在這個文件夾下面 ├── Licenses 這個其實跟編譯無關了,就是一些license的聲明 ├── net 網絡相關的,需要用的小型網絡協議棧 ├── post 上電自檢程序 ├── scripts 編譯腳本和Makefile文件 ├── spl second program loader,即相當于二級uboot啟動。 ├── test 小型的單元測試程序。 └── tools 里面有很多uboot常用的工具。 ~~~ 了解了uboot的基本結構,我們可以知道一些相關的配置在什么地方了。 * lichee的uboot配置文件放在confgs文件目錄下面,名稱為 ~~~ LicheePi_Zero_480x272LCD_defconfig LicheePi_Zero_800x480LCD_defconfig LicheePi_Zero_defconfig ~~~ 這3個配置是根據不同的Zero顯示設備進行的配置,使用其中之一即可,可以在uboot目錄下執行命令 `make LicheePi_Zero_defconfig` 這樣配置就生效了。 * 關于設備的配置引腳信息可以在arch/arm/dts的設備樹下面進行查找。 通過查看arch/arm/dts/Makefile我們看到下面這段關于v3s的代碼: ~~~ dtb-$(CONFIG_MACH_SUN8I_V3S) += \ sun8i-v3s-licheepi-zero.dtb ~~~ 我們基本可以找到對應的dtb文件就是sun8i-v3s-licheepi-zero.dtb 打開sun8i-v3s-licheepi-zero.dts(dtb是object文件,相當于*.o, dts相當于*.c)文件 ~~~ #include "sun8i-v3s.dtsi" //這個文件包含了sun8i-v3s系列的配置 #include "sunxi-common-regulators.dtsi" / { model = "Lichee Pi Zero"; compatible = "licheepi,licheepi-zero", "allwinner,sun8i-v3s"; aliases { serial0 = &uart0; }; 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"; }; &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"; }; ~~~ 從這個配置文件中可以看出,我們所用的stdout輸出是用的uart0 波特率115200,mmc的配置, uart0的引腳采用的是uart0_pins_a 等。 如若需要修改對應的輸出,可以在這個文件中修改。 # 2. menuconfig里的常見配置選項 編譯uboot的需要生成.config文件來將該配置生效。 配置的生效有兩步: **第一步,先將Zero默認的配置加載進來:** Zero已經將配置定制好了,執行相應的命令就可以生成了。下面是生成配置的命令 `make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig` 這個命令可以分為3個部分 1. 設置變量ARCH值為arm 2. 設置變量CROSS_COMPILE值為arm-linux-gnueabihf- 3. make LicheePi_Zero_800x480LCD_defconfig 最后一個make LicheePi_Zero_800x480LCD_defconfig才是重點,執行這條命令就可以對應生成一個編譯所需要的配置文件.config **第二步,對于配置文件可以通過是圖形界面的方式修改某一個特定配置選項** 有了配置文件,需要的時候我們可以對其進行修改,linux提供了一種圖形界面的方式,這種方式一般在后期需要改某些編譯選項的時候,用戶交互比較方便,現在我們可以來看看有哪些配置。 `make ARCH=arm menuconfig` 執行這個命令就可以出現一個UI交互比較好的配置文件選項,可以看下面的截圖: ![](https://box.kancloud.cn/c0bc403f54d5c23409af3dda76c6eb1e_1167x606.png) <ENTER> ---按回車,即選擇當前菜單 <Y> ------- 按Y 代表該config選項選中 <N> ------- 按N 代表不選中該選項 <M> -------- 按M 代表該驅動編譯成*.ko的方式,在系統起來之后,當驅動需要的時候加載 </>---------按/ 可以查找某個選項 <esc>---------退出 <\*> ----------按Y選中后的狀態 **這里面有幾個常見的配置選項我們可以看下:** 1. 第一個`Architecture select`架構選擇,不用質疑這個是ARM架構 2. 第二個`ARM architecture ` 這個選項比較重要,主要配置ARM框架下的常用的配置函數以及LCD等參數 ![](https://box.kancloud.cn/e6935388a45eb157a0267b5e0f566414_654x362.png) ~~~ ... Target select (Support sunxi (Allwinner) SoCs) 進去之后可以選擇sunxi Soc系列芯片 ... [*] Sunxi SoC Variant 這個就是對芯片Soc 的選擇,我們可以看到配置選擇了`sun8i (Allwinner V3s) (360) sunxi dram clock speed 配置dram的時鐘速率 (14779) sunxi dram zq value 配置dram的ZQ值,是用來動態加強DDR3的 -*- Board uses DDR2 DRAM 使用DDR2 DRAM ~~~ ![](https://box.kancloud.cn/e3c46cc8756651c4cd7943b824939964_745x364.png) ~~~ [*] Enable graphical uboot console on HDMI, LCD or VGA 這個就是在顯示設備上使能串口控制 [ ] VGA via LCD controller support 使能支持VGA通過LCD的控制器,就是LCD和VAG轉換需要的控制器 (x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:40,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0) LCD pane > 該選項就是配置LCD的分辨率的配置選項可以看到x是800 y是480 等等一些關于LCD的配置內容,點擊回車進去可以對其進行修改。 (1) LCD panel display clock phase 這個是LCD的顯示時鐘相位 () LCD panel power enable pin LCD的電源使能引腳 () LCD panel reset pin LCD的復位引腳 (PB4) LCD panel backlight pwm pin 背光PWN引腳 這個應該是調節亮度的引腳PB4 [*] LCD panel backlight pwm is inverted 反轉PWN背光引腳 [ ] LCD panel needs to be configured via i2c LCD panel support (Generic parallel interface LCD panel) ---> 這個選擇支持的LCDpanel (X) Generic parallel interface LCD panel 這里選擇支持通用的并行的LCD接口 ( ) Generic lvds interface LCD panel 這個是LVDS接口 ( ) MIPI 4-lane, 513Mbps LCD panel via SSD2828 bridge chip ( ) eDP 4-lane, 1.62G LCD panel via ANX9804 bridge chip ( ) Hitachi tx18d42vm LCD panel ( ) tl059wv5c0 LCD panel (0) GMAC Transmit Clock Delay Chain ~~~ 3.`General setup --->` `(0x400) Size of malloc() pool before relocation` 這個我們就看下malloc的棧池分配了0x400大小 4.`Boot images ---> ` `(1008000000) CPU clock frequency` 這里設置了CPU的時鐘頻率 5.`delay in seconds before automatically booting`這個是uboot開機的時候的一個等待時間的秒數,可以改大一點,默認是2s 6.`Console --->` 這個就是串口打印的一些配置 7.`Display information about the CPU during start up` 開機的時候顯示CPU信息。 8.`Display information about the board during start up` 開機的時候顯示BOARD的信息 9.`SPL / TPL --->` 這個就是SPL相關的配置了 ~~~ [*] MMC raw mode: by sector 按扇區 (0x50) Address on the MMC to load U-Boot from mmc加載uboot的地址 [*] Support GPIO 支持GPIO [*] Support I2C 支持I2C [*] Support common libraries 支持通用lib [*] Support disk paritions 支持分區 [*] Support generic libraries 支持一般lib庫 [*] Support MMC 支持MMC [*] Support power drivers 支持電源驅動 [*] Support serial 支持串口 ~~~ 10.`Command line interface --->` 這里存放的是u-boot啟動的時候支持的cmd 基本常用的就是上述配置,其他配置都可以采用官方配置就可以了。 # 3.編譯步驟 上面已經講述了如何把配置文件進行生成.config文件。做好這兩件事情之后就可以編譯了。 官方git上給的命令是: `time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 2>&1 | tee build.log` 第一個time命令完全可以去掉,time主要為了計算該編譯需要花費的時間 `make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-` 這個之前的config也說了,其實就是給變量ARCH賦值arm 給CROSS_COMPILE賦值arm-linux-gnueabihf- 也可以先省去,剩下的: `make 2>&1 | tee build.log` tee 這個命令是把make生成的log寫入到build.log文件中,這樣編譯之后的log文件可以保留存有備份,也可以省去。 `make 2>&1` 查了下資料 數字2對應`stderr` 數字1對應`stdout` 這里即將標準err輸出 &作為連接符表示‘與’的意思,即標準輸出和標準error輸出都進行輸出。 其實真正執行編譯的是下面的命令: `make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-` 小伙伴可以試下,該命令是否可以編譯出u-boot-sunxi-with-spl.bin文件,其他的命令都是輔助編譯的命令,用于調試的時候開啟。親測直接make CROSS_COMPILE=arm-linux-gnueabihf- 也是可以的。 **FAQ:下面的內容可能其他章節會講到,所以下面就大致講下編譯環境的搭建** 本文所描述的uboot是基于[Lichee_Pi/uboot.git](https://github.com/Lichee-Pi/u-boot.git)的版本 先下載代碼,執行下面的命令。 ~~~ + git clone https://github.com/Lichee-Pi/u-boot.git + git checkout -b v3s-current origin/v3s-current + export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- + make LicheePi_Zero_defconfig ~~~ 1. 先要配置好編譯環境可以參照 [開發環境搭建.md](https://github.com/Zepan/ilichee/blob/master/%E8%BF%9E%E8%BD%BD%E5%B8%96/2.1.1%20%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA.md) 操作系統官方默認是在Ubuntu 14.04 64bit的環境下編譯的。 我試了下在Ubuntu16.04.1的ubuntu的版本下進行編譯。 裝好虛擬機操作系統之后,我們先安裝一些依賴包 ~~~ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev gcc-multilib x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils sudo apt-get install gcc-arm-linux-gnueabihf ~~~ 執行完這兩條命令之后,如果安裝成功,應該是可以編譯的,當然我在嘗試的時候最后mingw32會出現一些問題。 可能對于ubuntu16.04版本還要根據 git上**[編譯坑_Ubuntu 16.04編譯過程踩坑記錄.md](https://github.com/Zepan/ilichee/blob/master/%E9%82%A3%E4%BA%9B%E5%B9%B4%E6%88%91%E4%BB%AC%E8%B8%A9%E7%9A%84%E5%9D%91/%E7%BC%96%E8%AF%91%E5%9D%91_Ubuntu%2016.04%E7%BC%96%E8%AF%91%E8%BF%87%E7%A8%8B%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95.md)**來修改gcc的版本.然后呢根據 **[編譯坑_Ubuntu16.04編譯過程踩坑記錄二.md](https://github.com/Zepan/ilichee/blob/master/%E9%82%A3%E4%BA%9B%E5%B9%B4%E6%88%91%E4%BB%AC%E8%B8%A9%E7%9A%84%E5%9D%91/%E7%BC%96%E8%AF%91%E5%9D%91_Ubuntu16.04%E7%BC%96%E8%AF%91%E8%BF%87%E7%A8%8B%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95%E4%BA%8C.md)** 來修改部分的mingw32相關的編譯選項,對了后面編譯uboot的時候還會遇到dtc編譯版本低的問題,所以在此還要執行sudo apt-get install device-tree-compiler的命令升級dtc。至此編譯環境基本搭建好了。 這些都是樓主踩過的坑,感謝樓主,我們應該不需要踩了。還是挺有用的。 接著就可以下載uboot的源代碼: ` https://github.com/Lichee-Pi/u-boot.git` 執行這段命令uboot的源代碼就下下來了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看