天天日夜夜添_精品国产99久久久久久人裸体 _成人app在线观看_日韩色网站

新聞資訊

    excel如何設(shè)置超鏈接,快速跳轉(zhuǎn)至指定網(wǎng)址,超鏈接修改、刪除操作一目了然


    1.數(shù)據(jù)準(zhǔn)備
    準(zhǔn)備好需要超鏈接的單元格,以及需要跳轉(zhuǎn)的網(wǎng)址,比如 百度,需要跳轉(zhuǎn)至百度官方網(wǎng)址:https://www.baidu.com/
    北京,需要跳轉(zhuǎn)至百度百科北京簡介網(wǎng)址:https://upimg.baike.so.com/doc/2510451-2652822.html
    百度新聞,需要跳轉(zhuǎn)至百度百科上海簡介網(wǎng)址:https://news.baidu.com/
    百度地圖:https://map.baidu.com/@12959220,4825334.5,12z
    2.配置超鏈接 選中單元格,右鍵彈框點(diǎn)擊“超鏈接”,打開配置彈框


    3.確定后,百度變成藍(lán)色帶下劃線,鼠標(biāo)選中單元格還有提示超鏈接信息,點(diǎn)擊即可打開百度網(wǎng)址


    4.其他單元格分別按照步驟2配置即可完成
    北京,網(wǎng)址:https://upimg.baike.so.com/doc/2510451-2652822.html
    百度新聞,網(wǎng)址:https://news.baidu.com/
    百度地圖,網(wǎng)址::https://map.baidu.com/@12959220,4825334.5,12z


    補(bǔ)充---------------》 *修改超鏈接 如果超鏈接配置錯(cuò)了,我們也可以進(jìn)行修改操作 選中超鏈接單元格,右擊選擇“編輯超鏈接”,彈框打開修改為正確地址即可


    *取消超鏈接 有時(shí)不需要超鏈接,如何取消呢? 選中超鏈接單元格,右擊選擇“編輯超鏈接”,彈框打開修改為正確地址即可



    --------------工具/材料------------

    1.電腦: 筆記本、臺式電腦均可

    2.系統(tǒng):win10或其他

    3.軟件:Microsoft Excel 2016 或其他

    4.其他:暫無

    本文將從零開始通過一步一步操作來實(shí)現(xiàn)將主線U-Boot最新代碼移植到Orange Pi 3(全志H6)開發(fā)板上并正常運(yùn)行起來。本文從通用移植思路的角度,展現(xiàn)是思考的過程,通過這種方式希望能讓讀者一通百通,授之以漁,一定要讀完!后續(xù)持續(xù)更新系統(tǒng)移植系列文章,歡迎關(guān)注、點(diǎn)贊、收藏。

    這里從零開始移植的意思主要是指從Das Uboot官方網(wǎng)站或者代碼庫下載寫這篇文章時(shí)的最新版本(2023.10-rc4-00031-gc0c08be546-dirty)代碼,開始構(gòu)建編譯環(huán)境,配置,編譯,TF安裝,到最后在Orange Pi 3硬件板子上run起來。

    移植前思考

    主控芯片的啟動流程

    我們知道uboot屬于系統(tǒng)啟動過程中加載操作系統(tǒng)內(nèi)核,運(yùn)行內(nèi)核代碼的作用,所以我們知道cpu肯定會在系統(tǒng)啟動的某一個(gè)階段會執(zhí)行uboot固件代碼,uboot再引導(dǎo)linux內(nèi)核,但是因?yàn)椴煌闹骺匦酒煌腃PU核啟動也會流程也會不一樣。

    所以在移植之前,我們一定要弄清楚CPU的啟動流程以及分多少個(gè)階段,需要多少個(gè)bin文件,uboot屬于哪個(gè)啟動階段,必須要從啟動流程宏觀上了解清楚。

    全志H6屬于armV8 64位體系結(jié)構(gòu),armv8 體系結(jié)構(gòu)相較于之前的armv7都有很大不同,下圖是ARMV8的一個(gè)總的啟動流程:

    啟動流程1

    Arm啟動流程

    1. armv8-a 一般最先運(yùn)行bl1階段固件,也即是boot rom,這個(gè)一般固化在cpu的 rom里面,這是上電之后執(zhí)行的第一段代碼,主要是加載bl2階段代碼到iram執(zhí)行
    2. bl2階段代碼放在存儲媒介,比如emmc中,由bl1負(fù)責(zé) 運(yùn)行起來,因?yàn)閎l1代碼并未初始化DDR,所以加載到片內(nèi)SRAM中執(zhí)行,在這個(gè)階段完成外部DDR的初始化,并加載bl31到DDR運(yùn)行
    3. bl31一般稱為EL3 Service,屬于runtime,負(fù)責(zé)切換non securesecure兩個(gè)世界環(huán)境,運(yùn)行一些服務(wù),比如PSCI,SCMI等,同時(shí)負(fù)責(zé)把bl32和bl33代碼加載運(yùn)行起來
    4. bl32屬于trusted OS,如果不需要這個(gè)或者硬件不支持,可以去掉bl32,這個(gè)是可選的
    5. bl33一般是bootlaoder,負(fù)責(zé)引導(dǎo)后面的操作系統(tǒng)內(nèi)核

    在這里我們h6芯片的啟動流程我們選擇的就是下面這種比較流行的方式:

    啟動流程2

    流行啟動流程

    1. bl1階段是boot rom,固化在irom,這個(gè)沒什么好說的
    2. bl2是uboot編譯出來的SPL uboot,專門用于第二階段啟動的,SPL就是瘦身版本的uboot
    3. bl31 我們這里采用Arm Trusted Fireware(ATF)源碼編譯出來的bl31,這個(gè)是arm公司提供的開源代碼,回頭我們專門寫篇文章來講它
    4. bl32沒有,bl33就是bootloader,這里我們是uboot
    5. bl33 uboot后面讓它來引導(dǎo)linux操作系統(tǒng)內(nèi)核

    總的來說,后面我們需要3個(gè)文件,分別是:編譯ATF得到BL31, uboot編譯得到spl-uboot和完整uboot,然后再將這三個(gè)文件合并成一個(gè)最終文件,寫入TF卡啟動運(yùn)行。

    uboot移植的方式

    一般移植uboot有以下幾種方式:

    1. 找Orange PI 3這款硬件公司其已經(jīng)配置修改好的uboot代碼,編譯運(yùn)行就行
    2. 找Das UBOOT官方的主線代碼結(jié)合目標(biāo)硬件平臺自己修改配置,這個(gè)要求高一下,要求必須熟悉uboot,這種方式也更具挑戰(zhàn)性

    以第一種方式,其實(shí)硬件公司給我們提供了現(xiàn)場的uboot代碼,https://github.com/orangepi-xunlong/OrangePiH6_uboot

    當(dāng)然這里我選擇第二種方式,也就是將來無論拿過來一款新的開發(fā)板,我們都可以以此相同的步驟進(jìn)行移植,第二種方式更有普遍性。

    第二種方式主線移植也分兩種情況來區(qū)別對待:

    1. 如果uboot主線版本代碼已經(jīng)合入Orange PI 3開發(fā)板相關(guān)代碼,那就非常簡單,和上面說的第一種方式移植一樣,下載代碼編譯運(yùn)行即可。
    2. 如果主線最新版本沒有合入Orange PI 3開發(fā)板相關(guān)代碼,那就需要找一款主控芯片也是全志H6的開發(fā)板作參考,基于參考板子進(jìn)行配置,修改代碼,編譯再運(yùn)行

    為什么要找主控芯片一致的開發(fā)板作為基礎(chǔ)進(jìn)行移植?主要是為了減輕工作量,因?yàn)檫@樣主控相關(guān)代碼大多不需要修改,只是對兩個(gè)板子硬件上有差異的地方進(jìn)行配置修改即可,比如常見像RAM或者EMMC或者外設(shè)硬件相關(guān)代碼的配置修改。

    我們從 Das uboot的官方代碼倉:https://source.denx.de/u-boot/u-boot/ 文件搜索開發(fā)板名稱oange pi 3,我們可以看到相關(guān)的defconfig默認(rèn)配置文件以及設(shè)備樹文件都有了,很明顯最新2023.10-rc4-00031版本已經(jīng)支持該開發(fā)板,這樣我們工作量就小很多,下面就是按部就班的下載源碼,配置,編譯,運(yùn)行了。

    搜索倉庫

    下面我們按照工具安裝,下載代碼,配置,編譯,運(yùn)行的一般步驟走起來。

    安裝交叉編譯工具鏈

    為了編譯U-Boot,您需要一個(gè)適合您的主機(jī)平臺的編譯器。如果您不是在目標(biāo)平臺上構(gòu)建,則還需要 GCC 交叉編譯器。

    這里我們選擇GCC工具鏈,工具鏈的安裝搭建請參考官方文檔:https://u-boot.readthedocs.io/en/latest/build/gcc.html

    我的編譯主機(jī)是Ubuntu22.04,是基于 Debian的。目標(biāo)平臺硬件主控芯片是全志H6,查看芯片手冊,cpu 核心是Quad-Core ARM Cortex-A53,架構(gòu)是ARMV8 64.

    體系結(jié)構(gòu)

    在基于 Debian 的系統(tǒng)上,交叉編譯器包名為 gcc--linux-gnu。

    可以使用以下命令安裝 GCC 和適用于 ARMv8 架構(gòu)的 GCC 交叉編譯器

    sudo apt-get install gcc gcc-aarch64-linux-gnu

    可能需要依賴包

    sudo apt-get install bc bison build-essential coccinelle \
      device-tree-compiler dfu-util efitools flex gdisk graphviz imagemagick \
      liblz4-tool libgnutls28-dev libguestfs-tools libncurses-dev \
      libpython3-dev libsdl2-dev libssl-dev lz4 lzma lzma-alone openssl \
      pkg-config python3 python3-asteval python3-coverage python3-filelock \
      python3-pkg-resources python3-pycryptodome python3-pyelftools \
      python3-pytest python3-pytest-xdist python3-sphinxcontrib.apidoc \
      python3-sphinx-rtd-theme python3-subunit python3-testtools \
      python3-virtualenv swig uuid-dev

    ubuntu命令行運(yùn)行以下指令,如果正常出現(xiàn)版本信息那就表示GCC交叉工具鏈安裝正確了。

    aarch64-linux-gnu-gcc --version

    版本信息

    下載代碼

    下載步驟可以參考Das Uboot官方文檔,https://u-boot.readthedocs.io/en/latest/build/source.html

    您可以通過以下方式下載源代碼

    git clone https://source.denx.de/u-boot/u-boot.git

    或者Github 上維護(hù)著源鏡像

    git clone https://github.com/u-boot/u-boot

    不加分支默認(rèn)下載最新代碼。

    編譯代碼

    源碼編譯過程參考Uboot官方文檔https://u-boot.readthedocs.io/en/latest/board/allwinner/sunxi.html

    基于全志 SoC 的開發(fā)板

    對于所有使用基于 Allwinner ARM 的 SoC(“sunxi”)的開發(fā)板,U-Boot 編譯系統(tǒng)會生成單個(gè)集成鏡像文件:u-boot-sunxi-with-spl.bin. 該文件可用于 SD 卡、eMMC 設(shè)備、SPI 閃存以及基于 USB-OTG 的啟動方法(FEL)。

    要編譯出此文件:

    • 對于 64 位 SoC,首先要編譯出可信固件(TF-A,以前稱為 ATF),您將需要其bl31.bin. 請參閱下面的更多細(xì)節(jié)。
    • (可選)在 64 位 SoC 上編譯出the crust management processor firmware,也就是scp.bin文件.,這個(gè)文件是可選,這里我沒有用這個(gè)bin文件。
    • 編譯uboot鏡像uboot.bin文件通用步驟:
    $ export BL31=/path/to/bl31.bin               # required for 64-bit SoCs
    $ export SCP=/path/to/scp.bin                 # optional for some 64-bit SoCs
    $ make <yourboardname>_defconfig             #生成開發(fā)板配置
    $ make                                      #編譯uboot.bin

    The traditional SD card location the Allwinner BootROM loads from is 8KB (sector 16). This works fine with the old MBR partitioning scheme, which most SD cards come formatted with. However this is in the middle of a potential GPT partition table, which will become invalid in this step. Newer SoCs (starting with the H3 from late 2014) also support booting from 128KB, which is beyond even a GPT and thus a safer location.

    從上面通用編譯步驟看出,要編譯出uboot.bin必須要用到bl31.bin文件,scp.bin文件可選,主要是要將它們一起合并到一個(gè)最終uboot.bin文件。

    編譯bl31.bin(ATF)

    使用 64 位 Soc(A64、H5、H6、H616、R329)的主板需要 bl31階段的Arm Trusted Firmware-A固件 。這為 Armv8-A 提供了安全軟件環(huán)境,并提供 PSCI 和 SMCCC 服務(wù)。全志支持已完全主流化。編譯 bl31.bin:

    git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
    cd trusted-firmware-a
    make CROSS_COMPILE=aarch64-linux-gnu- PLAT=sun50i_h6 DEBUG=1 bl31

    A64 和 H5 SoC 的目標(biāo)平臺 ( PLAT=) 為 sun50i_a64,H6 sun50i_h6、H616 sun50i_h616 和 R329 sun50i_r329 的目標(biāo)平臺為 sun50i_a64。使用:

    $ find plat/allwinner -name platform.mk

    查找所有支持的平臺。TF-A 的docs/plat/allwinner.rst包含更多信息并列出了一些編譯選項(xiàng)。

    編譯完成之后會生成bl31.bin文件

    $ export BL31=$(pwd)/build/sun50i_h6/debug/bl31.bin

    因?yàn)槲覀冞@里沒用scp.bin,所以這里就不需要生產(chǎn)它了。

    配置

    編譯代碼之前我們要選擇開發(fā)板相關(guān)配置項(xiàng),上面我們查找過,最新版本uboot項(xiàng)目中是存在orange pi 3的默認(rèn)配置文件的。

    通過運(yùn)行以下指令,我們可以查看,

    git grep -l sun50i-h6-orangepi-3 configs

    可以看到在configs目錄下是存在orangepi_3_defconfig默認(rèn)配置文件的,使用它即可生成配置文件.config.

    make orangepi_3_defconfig

    編譯

    • 對于 64 位板,這需要設(shè)置 BL31 環(huán)境變量BL31,找到上面生成的bl31.bin的位置(如上面 TF-A 編譯示例中所示),或者在編譯命令行上提供
    • 同時(shí)還要制定使用的交叉編譯器前綴CROSS_COMPILE=aarch64-linux-gnu-
    • 因?yàn)閟cp.bin文件我們沒用,所以要指定為/dev/null,即SCP=/dev/null,否者會提示Image 'u-boot-sunxi-with-spl' is missing external blobs and is non-functional: scp錯(cuò)誤
    make CROSS_COMPILE=aarch64-linux-gnu- BL31=/home/albert/Documents/h6/arm-trusted-firmware-master/build/sun50i_h6/debug/bl31.bin SCP=/dev/null

    編譯完成之后,頂層目錄下會生成u-boot-sunxi-with-spl.bin文件,這個(gè)就是最終文件,里面包含ATF和SPL和uboot主體還有設(shè)備樹。

    目錄

    除了原始 NAND 閃存設(shè)備外,這個(gè)相同的文件可用于任何啟動源。它將包含 SPL 映像,配有 BROM 識別的正確簽名以及所需的校驗(yàn)和。此外,它將至少包含正確的 U-Boot,或者以傳統(tǒng) U-Boot 映像格式包裝,或者以 FIT 映像包裝。該板的設(shè)備樹也包含在內(nèi),或者附加到 U-Boot 適當(dāng)?shù)挠诚裰校蛘甙?FIT 映像中。如果 SoC 需要,此 FIT 文件還將包含其他固件映像。

    運(yùn)行Uboot

    燒寫到TF卡上

    用讀卡器將TF卡插入U(xiǎn)BUNTU系統(tǒng),使用DISKR軟件現(xiàn)將TF卡所有分區(qū)刪除,打開DISK軟件,找到TF卡存儲設(shè)備,點(diǎn)擊減號,刪除所有分區(qū)。

    所有 Allwinner SoC 都會嘗試在連接到第一個(gè) MMC 控制器的 SD 卡的第 16 扇區(qū) (8KB) 處查找啟動映像。要將生成的鏡像燒寫到 SD 卡,請從任何帶有(微型)SD 卡讀卡器的 Linux 設(shè)備(包括開發(fā)板本身),輸入:

    $ sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1k seek=8

    /dev/sdx需要替換為SD卡讀卡器的塊設(shè)備名稱。在某些機(jī)器上這可能是/dev/mmcblkX。較新的 SoC(從 2014 年的 H3 開始,包括所有 ARM64 SoC)也會查看扇區(qū) 256 (128KB) 的簽名(在檢查了 8KB 位置之后)。在那里安裝固件的優(yōu)點(diǎn)是不與 GPT 分區(qū)表重疊。只需將上面的“ seek=8”替換為“ seek=128”即可。

    連接UART0串口終端

    TF卡啟動卡制作完成之后,插入開發(fā)板TF口,然后通過USB轉(zhuǎn)TTL小板子連接電腦主機(jī)和開發(fā)板,上位機(jī)打開一個(gè)串口工具軟件,比如ubuntu putty或者windows SecureCRT,使用軟件打開串口,確保U轉(zhuǎn)串沒問題之后,給開發(fā)板上電。

    串口連接示意圖

    如果都沒有問題,我們會看到uboot運(yùn)行起來之后從UART0 串口終端輸出的運(yùn)行日志:

     U-Boot SPL 2023.10-rc4-00031-gc0c08be546-dirty (Sep 10 2023 - 01:10:43 +0800)
    DRAM: 2048 MiB
    Trying to boot from MMC1
    NOTICE:  BL31: v2.9(debug):
    NOTICE:  BL31: Built : 17:49:06, Sep  9 2023
    NOTICE:  BL31: Detected Allwinner H6 SoC (1728)
    NOTICE:  BL31: Found U-Boot DTB at 0xa09ae88, model: OrangePi 3
    INFO:    ARM GICv2 driver initialized
    INFO:    Configuring SPC Controller
    INFO:    PMIC: Probing AXP805 on RSB
    INFO:    PMIC: aldo1 voltage: 3.300V
    INFO:    PMIC: aldo2 voltage: 3.300V
    INFO:    PMIC: aldo3 voltage: 3.300V
    INFO:    PMIC: bldo1 voltage: 1.800V
    INFO:    PMIC: bldo2 voltage: 1.800V
    INFO:    PMIC: cldo1 voltage: 3.300V
    INFO:    PMIC: dcdcd voltage: 0.960V
    INFO:    PMIC: dcdce voltage: 1.200V
    INFO:    BL31: Platform setup done
    INFO:    BL31: Initializing runtime services
    INFO:    BL31: cortex_a53: CPU workaround for erratum 855873 was applied
    INFO:    BL31: cortex_a53: CPU workaround for erratum 1530924 was applied
    INFO:    PSCI: Suspend is unavailable
    INFO:    BL31: Preparing for EL3 exit to normal world
    INFO:    Entry point address=0x4a000000
    INFO:    SPSR=0x3c9
    
    
    U-Boot 2023.10-rc4-00031-gc0c08be546-dirty (Sep 10 2023 - 01:10:43 +0800) Allwinner Technology
    
    CPU:   Allwinner H6 (SUN50I)
    Model: OrangePi 3
    DRAM:  2 GiB
    Core:  63 devices, 17 uclasses, devicetree: separate
    WDT:   Not starting watchdog@7020400
    MMC:   mmc@4020000: 0, mmc@4021000: 2, mmc@4022000: 1
    Loading Environment from FAT... ** No valid partitions found **
    In:    serial@5000000
    Out:   serial@5000000
    Err:   serial@5000000
    Net:   No ethernet found.
    starting USB...
    Bus usb@5101000: USB EHCI 1.00
    Bus usb@5101400: USB OHCI 1.0
    Bus usb@5200000: Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    Bus usb@5311000: USB EHCI 1.00
    Bus usb@5311400: USB OHCI 1.0
    scanning bus usb@5101000 for devices... 1 USB Device(s) found
    scanning bus usb@5101400 for devices... 1 USB Device(s) found
    scanning bus usb@5200000 for devices... 3 USB Device(s) found
    scanning bus usb@5311000 for devices... 1 USB Device(s) found
    scanning bus usb@5311400 for devices... 1 USB Device(s) found
           scanning usb for storage devices... 0 Storage Device(s) found
    Hit any key to stop autoboot:  0 
    switch to partitions #0, OK
    mmc0 is current device
    ** Invalid partition 1 **
    Couldn't find partition mmc 0:1
    switch to partitions #0, OK
    mmc1(part 0) is current device
    Scanning mmc 1:1...
    Card did not respond to voltage select! : -110
    No EFI system partition
    No EFI system partition
    Failed to persist EFI variables
    BootOrder not defined
    EFI boot manager: Cannot load any image
    
    Device 0: unknown device
    No ethernet found.
    missing environment variable: pxeuuid
    Retrieving file: pxelinux.cfg/00000000
    No ethernet found.
    Retrieving file: pxelinux.cfg/0000000
    No ethernet found.
    Retrieving file: pxelinux.cfg/000000
    No ethernet found.
    Retrieving file: pxelinux.cfg/00000
    No ethernet found.
    Retrieving file: pxelinux.cfg/0000
    No ethernet found.
    Retrieving file: pxelinux.cfg/000
    No ethernet found.
    Retrieving file: pxelinux.cfg/00
    No ethernet found.
    Retrieving file: pxelinux.cfg/0
    No ethernet found.
    Retrieving file: pxelinux.cfg/default-arm-sunxi-sunxi
    No ethernet found.
    Retrieving file: pxelinux.cfg/default-arm-sunxi
    No ethernet found.
    Retrieving file: pxelinux.cfg/default-arm
    No ethernet found.
    Retrieving file: pxelinux.cfg/default
    No ethernet found.
    Config file not found
    No ethernet found.
    No ethernet found.=> 

    前面一段可以看出是UBOOT SPL和bl31階段的log,后面就是UBOOT 2023運(yùn)行之后的log,這里因?yàn)槲覀儧]有在任何存儲介質(zhì)提供linux 內(nèi)核鏡像,所以報(bào)EFI boot manager: Cannot load any image錯(cuò)誤而無法繼續(xù)加載引導(dǎo)linux,這是正常的。

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有