在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Tina_Linux_系統軟件開發指南

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-02 15:25 ? 次閱讀


Tina_Linux_系統軟件 開發指南

image-20221123145359081image-20221123145359081image-20221123145359081image-20221123145359081image-20221123145359081

1 概述

編寫目的:本文檔作為Allwinner Tina Linux系統平臺開發指南,旨在幫助軟件開發工程師、技術支持工程師快速上手,熟悉Tina Linux系統的開發及調試流程。

適用范圍:Tina Linux v3.5及以上版本。

2 Tina系統資料

2.1 概述

Tina SDK發布的文檔旨在幫助開發者快速上手開發及調試,文檔中涉及的內容并不能涵蓋所有的開發知識和問題。文檔列表也正在不斷更新。

Tina SDK提供豐富的文檔資料,包括硬件參考設計文檔、Flash等基礎器件支持列表、量產工具使用說明、軟件開發與制定介紹文檔、芯片研發手冊等資料。

2.2 文檔列表

請以全志科技全志客戶服務平臺最新列表為準。

3 Tina系統概述

3.1 概述

Tina Linux系統是基于openwrt-14.07的版本的軟件開發包,包含了Linux系統開發用到的內核源碼、驅動、工具、系統中間件與應用程序包。openwrt是一個開源的嵌入式Linux系統自動構建框架,是由Makefile腳本和Kconfig配置文件構成的。使得用戶可以通過menuconfig配置,編譯出一個完整的可以直接燒寫到機器上運行的Linux系統軟件。

3.2 系統框圖

圖3-1: Tina Linux系統框圖

Tina系統軟件框圖如圖所示,從下至上分為Kernel && Driver、Libraries、System Ser-vices、Applications四個層次。各層次內容如下:

Kernel&&Driver主要提供Linux Kernel的標準實現。Tina平臺的Linux Kernel 采用Linux3.4、linux3.10、linux4.4、linux4.9等內核(不同硬件平臺可能使用不同內核版本)。提供安全性,內存管理,進程管理,網絡協議棧等基礎支持;主要是通過Linux內核管理設備硬件資源,如CPU調度、緩存、內存、I/O等。

Libraries層對應一般嵌入式系統,相當于中間件層次。包含了各種系統基礎庫,及第三方開源程序庫支持,對應用層提供API接口,系統定制者和應用開發者可以基于Libraries層的API開發新的應用。

System Services層對應系統服務層,包含系統啟動管理、配置管理、熱插拔管理、存儲管理、多媒體中間件等。

Applications層主要是實現具體的產品功能及交互邏輯,需要一些系統基礎庫及第三方程序庫支持,開發者可以開發實現自己的應用程序,提供系統各種能力給到最終用戶。

3.3 開發流程

Tina Linux 系統是基于 Linux Kernel,針對多種不同產品形態開發的 SDK。可以基于本 SDK,有效地實現系統定制和應用移植開發。

圖3-2: Tina Linux系統開發流程

如上圖所示,開發者可以遵循上述開發流程,在本地快速構建Tina Linux系統的開發環境和編譯 代碼。下面將簡單介紹下該流程:

檢查系統需求:在下載代碼和編譯前,需確保本地的開發設備能夠滿足需求,包括機器的硬件能力,軟件系統,工具鏈等。目前Tina Linux系統只支持Ubuntu操作系統環境下編譯,并僅提供Linux環境下的工具鏈支持,其他如MacOS,Windows等系統暫不支持。

搭建編譯環境:開發機器需要安裝的各種軟件包和工具,詳見開發環境章節,獲知TinaLinux已經驗證過的操作系統版本,編譯時依賴的庫文件等。

選擇設備:在編譯源碼前,開發者需要先導出預定義環境變量,然后根據開發者根據的需求,選擇對應的硬件板型,詳見編譯章節。

系統定制:開發者可以根據使用的硬件板子、產品定義,定制U-Boot、Kernel及Open-wrt,請參考后續章節中相關開發指南和配置的描述。

編譯與打包:完成設備選擇、系統定制之后執行編譯命令,包括整體或模塊編譯以及編譯清理等工作,進一步的,將生成的boot/內核二進制文件、根文件系統、按照一定格式打包成固件。詳見編譯打包章節。

燒錄并運行:繼生成鏡像文件后,將介紹如何燒錄鏡像并運行在硬件設備,進一步內容詳見系統燒寫章節。

4 Tina開發環境

4.1 概述

嵌入式產品開發流程中,通常有兩個關鍵的步驟,編譯源碼與燒寫固件。源碼編譯需要先準備好

編譯環境,而固件燒寫則需要廠家提供專用燒寫工具。本章主要講述這如何搭建環境來實現Tinasdk的編譯、燒寫。

4.2 編譯環境搭建.

一個典型的嵌入式開發環境包括本地開發主機和目標硬件板。

本地開發主機作為編譯服務器,需要提供Linux操作環境,建立交叉編譯環境,為軟件開發提供代碼更新下載,代碼交叉編譯服務。

本地開發主機通過串口或USB與目標硬件板連接,可將編譯后的鏡像文件燒寫到目標硬件板,并調試系統或應用程序。

4.2.1 開發主機配置.

Tina Linux SDK是在ubuntu14.04開發測試的,因此我們 推薦使用Ubuntu 14.04 主機環境進行源碼編譯,其他版本沒有具體測試,可能需要對軟件包做相應調整。

4.2.2 軟件包配置.

編譯Tina Linux SDK 之前,需要先確定編譯服務器安裝了gcc,binutils,bzip2,flex,python,perl,make,ia32-libs,find,grep,diff,unzip,gawk,getopt,subver-sion,libz-dev,libc headers

ubuntu可直接執行以下命令安裝:

sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawkflex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip ia32-libslib32z1 lib32z1-dev lib32stdc++6 libstdc++6 -y

ubuntu 16.04及以上版本,執行下面命令安裝軟件包:

sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++ libstdc++6 -y libc6:i386 libstdc++6:i386 lib32ncurses5 lib32z

5 Tina系統獲取

5.1 概述

5.2 SDK獲取

Allwinner Tina Linux SDK通過全志代碼服務器對外發布。客戶需要向業務/技術支持窗口申請SDK下載權限。申請需同步提供SSH公鑰進行服務器認證授權,獲得授權后即可同步代碼。

5.3 SDK結構

Tina Linux SDK主要由構建系統、配置工具、工具鏈、host工具包、目標設備應用程序、文檔、腳本、linux內核、bootloader部分組成,下文按照目錄順序介紹相關的組成組件。

Tina-SDK/

├── build

├── config

├── Config.in

├── device

├── dl

├── docs

├── lichee

├── Makefile

├── out

├── package

├── prebuilt

├── rules.mk

├── scripts

├── target

├── tmp

├── toolchain

└── tools

5.3.1 build目錄

build目錄存放Tina Linux的構建系統文件,此目錄結構下主要是一系列基于Makefile規格編 寫的mk文件。主要的功能是:

檢測當前的編譯環境是否滿足Tina Linux的構建需求。

生成host包編譯規則。

生成工具鏈的編譯規則。

生成target包的編譯規則。

生成linux kernel的編譯規則。

生成系統固件的生成規則。

build/

├── autotools.mk

├── aw-upgrade.mk

├── board.mk

├── cmake.mk

├── config.mk

├── debug.mk

├── depends.mk

├── device.mk

├── device_table.txt

├── download.mk

├── dumpvar.mk

├── envsetup.sh

5.3.2 config目錄

config目錄主要存放Tina Linux中配置菜單的界面以及一些固定的配置項,該配置菜單基于內 核的mconf規格書寫。

config/

├── Config-build.in

├── Config-devel.in

├── Config-images.in

├── Config-kernel.in

└── top_config.in

5.3.3 devices目錄

devices目錄用于存放方案的配置文件,包括內核配置,env配置,分區表配置,sys_config.fex, board.dts等。

這些配置在舊版本上是保存于target目錄下,新版本挪到device目錄。

注意defconfig仍保存在target目錄。

device/

└── config

├── chips

├── common

└── rootfs_tar

快捷跳轉命令:cconfigs

5.3.4 docs目錄

docs目錄主要存放用于開發的文檔,以markdown格式書寫。

本目錄不再更新,請以全志客戶服務平臺系統文檔為準。

docs/

├── build.md

├── config.md

├── init-scripts.md

├── Makefile

├── network.md

├── tina.md

├── wireless.md

└── working.md

5.3.5 lichee目錄

lichee目錄主要存放bootloader,內核,arisc,dsp等代碼。

lichee/

├── bootloader

│ ├── uboot_2011_sunxi_spl

│ └── uboot_2014_sunxi_spl

├── brandy

│ ├── u-boot-2011.09

│ └── u-boot-2014.07

├── brandy-2.0

│ ├── spl

│ ├── tools

│ └── u-boot-2018

├── linux-3.4

├── linux-3.10

├── linux-4.4

├── linux-4.9

├── arisc

快捷跳轉命令:ckernel,cboot,cboot0,carisc

5.3.6 package目錄

package目錄存放target機器上的軟件包源碼和編譯規則,目錄按照目標軟件包的功能進行分 類。

package/ ├── allwinner ├── base-files ├── devel ├── dragonst ├── firmware ├── kernel ├── ...... └── utils

5.3.7 prebuilt目錄

prebuild目錄存放預編譯交叉編譯器,目錄結構如下。

prebuilt/ └── gcc └── linux-x86 ├── aarch64 │ ├── toolchain-sunxi-musl │ └── toolchain-sunxi-glibc ├── arm │ ├── toolchain-sunxi-arm9-glibc │ ├── toolchain-sunxi-arm9-musl │ ├── toolchain-sunxi-glibc │ ├── toolchain-sunxi-musl └── host └── host-toolchain.txt

5.3.8 scripts目錄

scripts目錄用于存放一些構建編譯相關的腳本。

scripts/ ├── arm-magic.sh ├── brcmImage.pl ├── bundle-libraries.sh ├── checkpatch.pl ├── clang-gcc-wrapper ├── cleanfile ├── clean-package.sh ├── cleanpatch ├── ......

5.3.9 target目錄

target目錄用于存放目標板相關的配置以及sdk和toolchain生成的規格。

target/ ├── allwinner ├── Config.in ├── imagebuilder ├── Makefile ├── sdk └── toolchain

快捷跳轉命令:cdevice。

5.3.10 toolchain目錄.

toolchain目錄包含交叉工具鏈構建配置、規則。

toolchain/ ├── binutils ├── Config.in ├── fortify-headers ├── gcc ├── gdb ├── glibc ├── info.mk ├── insight ├── kernel-headers ├── Makefile ├── musl └── wrapper

5.3.11 tools目錄.

tools目錄用于存放host端工具的編譯規則。

tools/ ├── autoconf ├── automake ├── aw_tools ├── b43-tools ├── ......

5.3.12 out目錄.

out目錄用于保存編譯相關的臨時文件和最終鏡像文件,編譯后自動生成此目錄,例如編譯方案 r328s2-perf1。

out/ ├── r328s2-perf └── host

其中host目錄用于存放host端的工具以及一些開發相關的文件。

r328s2-perf1目錄為方案對應的目錄。方案目錄下的結構如下:

out/r328s2-perf ├── boot.img ├── compile_dir ├── image ├── md5sums ├── packages ├── r328s2-perf1-boot.img ├── r328s2-perf1-uImage ├── r328s2-perf1-zImage ├── rootfs.img ├── sha256sums ├── staging_dir └── tina_r328s2-perf1_uart0.img

boot.img為最終燒寫到系統boot分區的數據,可能為boot.img格式也可能為uImage格式。

rootfs.img為最終燒寫到系統rootfs分區的數據,該分區默認為squashfs格式。

r328s2-perf1-zImage為內核的zImage格式鏡像,用于進一步生成uImage。

r328s2-perf1-uImage為內核的uImage格式鏡像,若配置為uImage格式,則會拷貝成boot.img。

r328s2-perf1-boot.img為內核的boot.img格式鏡像,若配置為boot.img格式,則會拷貝成boot.img

compile_dir為sdk編譯host,target和toolchain的臨時文件目錄,存有各個軟件包的源碼。

staging_dir為sdk編譯過程中保存各個目錄結果的目錄。

packages目錄保存的是最終生成的ipk軟件包。

tina_r328s2-perf1_uart0.img為最終固件包(系統鏡像),串口信息通過串口輸出

若使用pack -d,則生成的固件包為xxx_card0.img,串口信息轉遞到tf卡座輸出。

快捷跳轉命令:cout。

5.4 SDK更新

SDK更新分為兩類:一類是以補丁的形式發布到一號通,發布后系統以郵件形式通知開發者;另一類是定期(半年或季度)的小版本迭代升級,將過往的補丁合入到SDK中,發布后以系統郵件通知開發者,可基于干凈的SDK包通過repo sync命令更新。

5.5 問題反饋

Allwinner提供全志客戶服務平臺(https://open.allwinnertech.com),用來登記客戶遇到的 問題以及解決狀態。方便雙方追蹤,使問題處理更加高效。后續SDK問題、技術問題、技術咨詢 等都可以提交到此系統上,Allwinner技術服務會及時將問題進行分發、處理和跟蹤。

注:系統登錄帳號需要與Allwinner開通確認。

6 Tina編譯打包

6.1 概述

6.2 編譯系統

(1) source build/envsetup.sh (2) lunch (3) make [-jN] (4) pack [-d] 其中, 步驟(1)建立編譯環境,導出編譯變量。 步驟(2)提示需要選擇你想要編譯的方案。 步驟(3)參數N為并行編譯進程數量,依賴編譯服務器CPU核心數,如 4 核PC,可"make -j4" 步驟(4)打包固件,-d參數使生成固件包串口信息轉到tf卡座輸出。 編譯完成后系統鏡像會打包在out//目錄下

6.3 編譯boot

命令 命令有效目錄 作用
mboot tina下任意目錄 編譯boot0和uboot
mboot0 tina下任意目錄 編譯boot0
muboot tina下任意目錄 編譯uboot

6.4 編譯內核

命令 命令有效目錄 作用
mkernel tina下任意目錄 編譯內核

6.5 編譯arisc

arisc是AW平臺對cpus代碼環境的代稱,主要功能是負責休眠,關機等底層操作。它包含 cpus運行所需的驅動,庫及工具鏈等,編譯產生scp.bin,然后打包在Tina鏡像中,有boot- loader在啟動時加載到cpus域運行。

Tina中提供了如下與arisc相關的跳轉、編譯命令

命令 命令有效目錄 作用
carisc tina下任意目錄 跳轉到cpus代碼工程目錄
mkarisc tina下任意目錄 編譯cpus代碼

在Tina中,編譯arisc代碼有兩種方式,如下:

第一種方式,跳轉到arisc代碼路徑下,使用make編譯

arisc代碼庫具有獨立的工具鏈和構建體系,因此對arisc代碼的編譯,也可以cd到對應的路徑 下,執行make命令。但需注意,此時需要手動將生成的scp.bin文件拷貝到SDK的bin文件 路徑下,覆蓋對應的文件(一般路徑是tina/device/config/chips/${平臺名}/bin)。

操作如下,

step1 使用carisc或cd命令跳轉到arisc代碼環境下,一般為tina/lichee/arisc/ar100s。 step2 生成必要的配置。在arch/configs/下,存在許多defconfig默認配置文件,可根據AXP型號選擇使用,例如make sun50iw10p1_axp803_defconfig。此操作將會在arisc根目錄生成.config。 step3 修改默認配置,可使用make menuconfig。此操作會生成配置菜單,按需選擇配置即可,該操作會修改.config。如需重新使用默認配置,重新執行step2即可。 step4 使用make命令編譯 step5 將scp.bin拷貝到Tina的bin目錄,即cbin可跳轉的目錄即可。如/tina/device/config/chips/r818/binstep6 若需清理工程,可使用make clean step7 如需提交defconfig配置修改,可使用make savedefconfig命令。此命令會根據.config在arisc根目錄生成 defconfig。將defconfig拷貝到arch/configs/下,覆蓋對應配置文件即可。

注意:

一般來說,arisc執行的功能較為底層,多與休眠,關機等操作相關,對穩定性要求較高。我們不 建議客戶自己修改任何相關配置和代碼,如必須,請與我司聯系或執行足夠的穩定性測試。

第二種方式,使用mkarisc命令

如上述方法所述,Tina為了解決arisc編譯后還需手動拷貝的問題,Tina提供了這個快捷命令 mkarisc。需要指出的是:目前只支持R818、MR813的arisc代碼編譯。

操作如下,較為簡單

step1 配置tina環境,如soure build/envsetup.sh, lunch等操作。 step2 使用mkarisc編譯即可或直接編譯Tina,在編譯Tina時,也會自動調用mkarisc命令。

注意:

使用mkarisc命令編譯時,會自動讀取board.dts獲取AXP型號,然后使用對應的默認配置文 件編譯。如board.dts中指定使用“x-powers,axp803”時,mkarsic命令會使用arisc工程環 境下的sun50iw10p1_axp803_defconfig配置文件編譯。此時,若您需要修改該arisc配置, 只能先修改該配置文件后編譯,除此外不接受其他配置修改的方式。

6.6 編譯E907固件(V85x平臺異構AMP核)

E907是V85x平臺AMP CPU的代稱,其主要功能是提供通用算力補充、輔助Linux實現快起 等。它包含E907運行所需的驅動、庫及工具鏈等,編譯產生riscv.fex,打包到Tina鏡像中, 由bootloader在啟動時加載到RISC-V核上運行。

在Tina SDK中,編譯E907 RISCV代碼如下:

E907 RISCV 代碼庫具有獨立的工具鏈和構建體系,因此對 E907 固件的編譯,也可以跳 轉到對應的路徑下,執行命令。但需注意,此時需要手動將生成的 melis30.elf 文件拷貝 到 SDK 的 bin 文件路徑下,覆蓋對應的文件(一般路徑是 device/config/chips/${平臺 名}/configs/default/riscv.fex)。

操作如下,

step1 使用cd命令跳轉到e907代碼環境下,一般為rtos-dev/lichee/melis-v3.0/source step2 source melis-env.sh step3 lunch v853-e907-ver1-board step4 make menuconfig step5 make -j step6 如需減少存儲空間,可裁剪調試信息,在melis source目錄執行:riscv64-unknown-elf-strip ekernel/melis30.elf step7 拷貝并重命名成riscv.fex替換掉tina/device/config/chips/v853/configs/default目錄下的riscv.fex cp ekernel/melis30.elf /home/xxx/tina/device/config/chips/v853/configs/default/riscv.fex step8 Tina系統目錄執行打包命令pack

6.7 重編應用

請確保進行過一次固件的編譯,確保SDK基礎已經編譯,才能單獨重編應用包。重編應用包應用場景一般為: 只修改了應用,不想重新燒寫固件,只需要安裝應用安裝包即可 。請確保在編譯前已加載tina環境:

$ source build/envsetup.sh $ lunch

6.7.1 方法一

當在應用包的目錄(包括其子目錄)中,可執行

$ mm [-B] => B參數則先clean此應用臨時文件再編譯

示例:假設軟件包路徑為:tina/package/utils/rwcheck,則:

$ cd tina/package/utils/rwcheck $ mm -B

編譯出應用安裝包保存路徑為:

tina/out/<方案>/packages/base

6.7.2 方法二

當在tina的根目錄,可執行:

$ make <應用包的路徑>/clean,==>清空應用包臨時文件 $ make <應用包的路徑>/install,==>編譯軟件包 或者 $ make <應用包的路徑>/{clean,install},==>先清空臨時文件再編譯

示例:假設軟件包的路徑為:tina/package/utils/rwcheck,則:

$ cd tina $ make package/utils/rwcheck/{clean,install}

6.8 其他命令

命令 命令有效目錄 作用
make tina根目錄 編譯整個sdk
make menuconfig tina根目錄 啟動軟件包配置界面
make kernel_menuconfig tina根目錄 啟動內核配置界面
mkarisc tina下任意目錄 編譯cpus源碼,根據AXP型號選擇對應的默認配置
printfconfig tina下任意目錄 打印當前SDK的配置
croot tina下任意目錄 快速切換到tina根目錄
cconfigs tina下任意目錄 快速切換到方案的bsp配置目錄
cdevice tina下任意目錄 快速切換到方案配置目錄
carisc tina下任意目錄 快速切換到cpus代碼目錄
cgeneric tina下任意目錄 快速切換到方案generic目錄
cout tina下任意目錄 快速切換到方案的輸出目錄
cboot tina下任意目錄 快速切換到bootloader目錄
cgrep tina下任意目錄 在c/c++/h文件中查找字符串
minstall path/to/package/ tina根目錄 編譯并安裝軟件包
mclean path/to/package/ tina根目錄 clean軟件包
mm [-B] 軟件包目錄 編譯軟件包,-B指編譯前先clean
pack tina根目錄 打包固件
m tina下任意目錄 make的快捷命令,編譯整個sdk
p tina下任意目錄 pack的快捷命令,打包固件

7 Tina系統燒寫

7.1 概述

本章節主要介紹如何將構建完成的鏡像文件(image)燒寫并運行在硬件設備上的流程。

SDK中的燒錄工具不再更新,后續會刪除,請優先選擇從全志客戶服務平臺下載最新燒錄工具。

windows工具均集成在APST中,下載安裝APST即可,APST的工具均自帶文檔。

7.2 燒錄工具

Tina提供的幾種鏡像燒寫工具介紹如表所示,用戶可以選擇合適的燒寫方式進行燒寫。

工具 運行系統 描述
PhoenixSuit windows 分分區升級及整個固件升級工具
PhoenixCard windows 卡固件制作工具
PhoenixUSBpro windows 量產升級工具,支持USB一拖 8 燒錄
LiveSuit ubuntu 固件升級工具

對于ubuntu:

64bit主機使用LiveSuitV306_For_Linux64.zip。

32bit主機使用LiveSuitV306_For_Linux32.zip。

具體燒錄工具和使用說明,請到全志客戶服務平臺下載。

7.3 進入燒錄模式.

設備需進入燒錄模式,以下幾種情況會進入燒錄模式:

BROM無法讀取到boot0,例如新換的flash不包含數據,或者上電時短路flash阻斷通信

在串口中按 2 進入燒錄。即,在串口工具輸出框中,按住鍵盤的’2’,不停輸出字符’2’,上電啟動。boot0檢測到此字符,會跳到燒錄模式。

在uboot控制臺,執行efex。

在linux控制臺,執行reboot efex。

adb可用的情況下,可使用adb shell reboot efex,或點擊燒錄工具上的“立即燒錄”按鈕。

當完整配置[fel_key]下fel_key_max和fel_key_min時,按下鍵值在范圍內按鍵,之后上電。

當板子有FEL按鍵時,按住FEL按鍵上電。

制作特殊的啟動卡,從卡啟動再進入燒錄模式。

8 Tina uboot定制開發

8.1 概述

本章節簡單介紹uboot基本配置、功能裁剪、編譯打包、常用命令的使用,幫助客戶了解Tina 平臺uboot框架,為boot定制開發提供基礎。

目前Tina SDK共有三版uboot,分別是uboot-2011、uboot-2014、uboot-2018,分別在不 同硬件平臺上使用,客戶拿到SDK需要根據開發的硬件平臺核對版本信息。

8.2 代碼路徑

TinaSDK/ ├── brandy │ ├── ... │ ├── u-boot-2011 │ └── u-boot-2014 ├── brandy-2.0 │ ├── ... │ └── u-boot-2018

8.3 uboot功能

TinaSDK中,bootloader/uboot在內核運行之前運行,可以初始化硬件設備、建立內存空間映 射圖,從而將系統的軟硬件環境帶到一個合適狀態,為最終調用linux內核準備好正確的環境。 在Tina系統平臺中,除了必須的引導系統啟動功能外,uboot還提供燒寫、升級等其它功能。

引導內核能從存儲介質(nand/mmc/spinor)上加載內核鏡像到DRAM指定位置并運行。

量產&升級包括卡量產,USB量產,私有數據燒錄,固件升級。

電源管理包括進入充電模式時的控制邏輯和充電時的顯示畫面。

開機提示信息開機能顯示啟動logo圖片(BMP格式)。

Fastboot功能實現fastboot的標準命令,能使用fastboot刷機。

8.4 uboot配置

以uboot-2018為例,各項功能可以通過defconfig或配置菜單menuconfig進行開啟或關閉, 具體配置方法如下:

8.4.1 defconfig方式

8.4.1.1 defconfig配置步驟

vim /TinaSDK/lichee/brandy2.0/u-boot-2018/configs/sun8iw18p1_defconfig (若是spinor方案則打開sun8iw18p1_nor_defconfig)

打開sun8iw18p1_defconfig或sun8iw18p1_nor_defconfig后,在相應的宏定義前去掉或添加"#"即可將相應功能開啟或關閉。

圖8-1: defconfig配置圖

如上圖,只要將CONFIG_SUNXI_NAND前的#去掉即可支持NAND相關功能,其他宏定義的開啟關閉也類似。

8.4.1.2 defconfig配置宏介紹.

如下圖是sun8iw18p1_defconfig/sun8iw18p1_nor_defconfig中的基本宏定義的介紹:

圖8-2: defconfig基本宏定義介紹圖

8.4.2 menuconfig方式

通過menuconfig方式配置的方法步驟如下:

cd /TinaSDK/lichee/brandy2.0/u-boot-2018/ make ARCH=arm menuconfig或make ARCH=arm64 menuconfig 注意:arm針對 32 位平臺,arm64針對 64 位平臺。

執行上述命令會彈出menuconfig配置菜單,如下圖所示,此時即可對各模塊功能進行配置,配 置方法menuconfig配置菜單窗口中有說明。

圖8-3: menuconfig配置菜單圖

8.5 uboot編譯

8.5.1 方法一

在tina目錄下即可編譯uboot。

source build/envsetup.sh(見詳注1) lunch (見詳注2) muboot(見詳注3) 詳注: 1 加載環境變量及tina提供的命令。 2 輸入編號,選擇方案。 3 編譯uboot,編譯完成后自動更新uboot binary到TinaSDK/target/allwinner/$(BOARD)-common/bin/。

8.5.2 方法二

source build/envsetup.sh(見詳注1) lunch (見詳注2) cboot(見詳注3) make XXX_config(見詳注4) make -j 詳注: 3 跳轉到Uboot源碼目錄。 4 選擇方案配置,如果是使用norflash,運行make XXX_nor_config。 5 執行編譯uboot的動作。

8.6 uboot的配置

8.6.1 sys_config配置.

sys_config.fex是對不同模塊參數進行配置的重要文件,對各模塊重要參數的更改及更新提供了 極大的方便。其文檔存放路徑:

TinaSDK/target/allwinner/$(BOARD)/configs/sys_config.fex TinaSDK/device/config/chips/$(CHIP)/configs/$(BOARD)/sys_config.fex

8.6.1.1 sys_config.fex結構介紹

sys_config.fes主要由主鍵和子鍵構成,主鍵是某項功能或模塊的主標識,由[]括起,子鍵是對 該功能或模塊中各個參數的配置項,如下圖所示,dram_para是主鍵,dram_clk、dram_type 和dram_zp是子鍵。

圖8-4: sysconfig.fex基本結構圖

8.6.1.2 sys_config.fex配置實例

[platform]:平臺相關配置項。

圖8-5: platform配置圖

例如,debug_mode =1表示開啟uboot的調試模式,開啟后會在log中打印出對應的調試信 息。next_work=2表示燒錄完成后系統的下一步執行動作(0x1表示正常啟動、0x2表示重啟、 0x3表示關),其他配置可以查看[platform]前的提示說明。

[target]:目標平臺相關功能配置項

圖8-6: target配置圖

上圖中的可以通過配置boot_clock配置cpu的頻率大小。

[uart_para]:串口配置項,uart_para配置項是uboot串口打印調試時用到的重要配置

圖8-7: uart_para配置圖

上圖中的uart_debug_port=0表示使用的是uart0,uart_debug_tx/uart_debug_rx配置的gpio口(PA04/PA05)需要根據對應的GPIO DATASHEET進行配置。

8.6.1.3 sys_config.fex解析流程

在uboot2014/2018中sys_config.fex最終會被轉化為dtb(device tree binary,linux內核配置方式),dtb最終會被打包燒錄至flash中,啟動過程中會將該文件加載至內存,之前在sys_config.fex中配置的參數已轉化為dtb節點,最終會調用fdt_getprop_32()函數對dtb中的節點進行解析。

8.6.2 環境變量配置.

uboot的環境變量就是一個個的鍵值對,操作接口為:getenv(),setenv(),saveenv()。環境變量的形式:

boot_normal=sunxi_flash read 40007800 boot;boota 4000780 boot_recovery=sunxi_flash read 40007800 recovery;boota 40007800 boot_fastboot= fastboot

8.6.2.1 環境變量作用.

可以把一些參數信息或者命令序列定義在該環境變量中。在環境變量中定義UBOOT命令序列,

可以把UBOOT各個功能模塊按順序組合在一起執行,從而完成某個重要功能。

例如,如果執行了上述提到的 boot_normal 環境變量對應的命令,Uboot 則會先調用 sunxi_flash命令從存儲介質的boot分區上加載內核到DRAM的0x40007800位置;然后調 用boota命令完成內核的引導。

uboot啟動時調用環境變量方式下如圖所示:

圖8-8: uboot啟動調用環境變量方式圖

8.6.2.2 環境變量配置示例介紹.

TinaSDK中,環境變量配置文件保存在TinaSDK/target/allwinner/$(BOARD)/configs/env.cfg 文件,用戶使用的時候,可能會看到env-4.4.cfg、env-4.9.cfg等文件,env-xxx后綴數字表示在不同內核版本上的配置。打開后其內容示例如下,

bootdelay=0,改環境變量bootdelay(即boot啟動時log中的倒計時延遲時間)值的大小,為便于調試,bootdelay的值一般不要等于 0 ,這樣在小機上電后按下任意鍵才能進入uboot shell命令狀態。

boot_normal=sunxi_flash read 40007800 boot;boota 4000780,設置啟動內核命令,即將boot分區讀到內存0x40007800地址處,然后從內存0x40007800地址處啟動內核。

Setargs_nand=setenv bootargs earlyprintk=${earlyprink}....... ,設置內核相關環境變量,該變量在啟動至內核的log中會打印處理,即cmdline如下圖:

圖8-9: kernel cmdline圖

loglevel=8,設置內核log打印等級。

8.6.3 sys_partition.fex分區配置

分區配置文件是一個規劃磁盤分區的文件,燒錄過程會按照該分區配置文件將各分區數據燒錄至flash中。

TinaSDK中,分區配置文件路徑TinaSDK/target/allwinner/$(BOARD)/configs/sys_partition.fex。有些方案可以看到sys_partition.fex、sys_partition_nor.fex兩個分區配置文件,若是打包Tina非nor固件,則使用的是sys_partition_linux.fex配置文件,若是打包nor固件,則使用的是sys_partition_nor.fex。

8.6.3.1 sys_partition.fex分區配置介紹

一個分區的屬性,包含名稱、分區大小、下載文件與用戶屬性。以下是文件中所描述的一個分區的屬性:

name,分區名稱由用戶自定義。當用戶在定義一個分區的時候,可以把這里改成自己希望的字符串,但是長度不能超過 16 個字節。

size,定義該分區的大小,以扇區的單位(1扇區=512bytes,如上圖給env 分區分配了32768 個扇區,即32768*512/1024/1024 = 16M),注意,為了字節對齊,這里分配的扇區大小應當能整除 128 。

downloadfile,下載文件的路徑和名稱。可以使用相對路徑,相對是指相對于image.cfg文件所在分區。也可以使用絕對路徑。

user_type,提供給操作系統使用的屬性。目前,每個操作系統在讀取分區的時候,會根據用戶屬性來判斷當前分區是不是屬于自己的然后才進行操作。這樣設計的目的是為了避免在多系統同時存在的時候,A操作系統把B操作系統的系統分區進行了不應該的讀寫操作,導致B操作系統無法正常工作。

更具體的說明,可參考《TinaLinux存儲管理開發指南》。

9 Tina kernel定制開發

9.1 概述

本章節簡單介紹kernel基本配置、功能裁剪、常用命令的使用,幫助客戶了解Tina平臺linux 內核,為內核定制開發提供基礎。

目前Tina SDK共有 4 版linux kernel,分別是linux-3.4、linux-3.10、linux-4.4、linux- 4.9,分別在不同硬件平臺上使用,客戶拿到SDK需要根據開發的硬件平臺核對內核信息。

9.2 代碼路徑

TinaSDK/ ├── ... ├── linux-3.10 ├── linux-3.4 ├── linux-4.4 └── linux-4.9

9.3 模塊開發文檔.

詳閱BSP開發文檔,文檔目錄包括常用內核模塊使用與開發說明。

9.4 內核配置

客戶在定制化產品時,通常需要更改linux內核配置,在TinaSDK中,打開內核配置的方式如 下,

croot make kernel_menuconfig

執行完后,shell控制臺會跳出配置菜單。如下圖所示,

圖9-1: TinaLinux內核配置菜單

10 Tina系統定制開發

10.1 Tina procd-init與busybox-init切換.

tina默認為procd-init:

make menuconfig進行配置: 1.System init 選擇procd-init 2.以下一步步選中 Base system ---> <*>block-mount <*>busybox................................ Core utilities for embedded Linux ---> Init Utilities ---> [ ] init 此處不選 Coreutils ---> [*] head Miscellaneous Utilities ---> [*] strings <*> uci <*> logd 3.env.cfg修改 init=/sbin/init

busybox-init自啟動方式配置如下:

make menuconfig進行配置: 1.System init 選擇busy-init 2.以下一步步選中 Base system ---> <*>busybox................................ Core utilities for embedded Linux ---> Init Utilities ---> [* ] init 此處選上 3.env.cfg修改 init=/init rdinit=/rdinit

10.2應用移植

在Tina Linux SDK中一個軟件包目錄下通常包含如下兩個目錄和一個文件:

package/<分類>/<軟件包名>/Makefile package/<分類>/<軟件包名>/patches/ [可選] package/<分類>/<軟件包名>/files/ [可選] 其中, patches 保存補丁文件,在編譯前會自動給源碼打上所有補丁 files 保存軟件包的源碼,在編譯時會對應源碼覆蓋源碼中的源文件 Makefile 編譯規則文件,

10.2.1 Makefile范例

該Makefile的功能是軟件源碼的準備,編譯和安裝的過程,提供給Tina Linux識別和管理軟件包的接口,軟件的編譯邏輯是由軟件自身的Makefile決定,理論上和該Makefile(該Makefile只執行make命令和相關參數)無實質關系。

圖10-2-1

詳注:

1.如果是開源軟件,軟件包版本建議與下載軟件包的版本一致。 2.以PKG開頭的變量主要告訴編譯系統去哪里下載軟件包。 3.md5sum用于校驗下載下來的軟件包是否正確,如果正確,在編譯該軟件的時候,就會在PKG_BUILD_DIR下找到該軟件包的源碼。 4.Package/: 用來指定該Package的名字,該名字會在配置系統中顯示。 5.使用依賴包的名字來指定依賴關系,如果是擴展包,前面添加一個”+”號,如果是內核版本依賴使用@LINUX_2_。 6.如果該值為 1 ,該包將不會出現在配置菜單中,但會作為固定編譯,可選。 7.在開源軟件中一般用來生成Makefile,其中參數可以通過CONFIGURE_VARS來傳遞。 8.在開源軟件中一般相當于執行make,其中有兩個參數可以使用:MAKE_FLAGS和MAKE_VARS。 9.內置的幾個關鍵字如下: INSTALL_DIR相當于install -d m0755 INSTALL_BIN相當于install -m0755 INSTALL_DATA相當于install -m0644 INSTALL_CONF相當于install -m0600 10.該Makefile的所有define部分都是為該宏的參數做的定義.上層Makefile通過調用此宏進行編譯。

10.2.2 自啟動設置

在Tina Linux中支持兩種格式的初始化腳本,一種是busybox式或者sysV式的初始化腳本, 一種是procd式的初始化腳本。一般我們把由初始化腳本啟動的應用叫做服務

初始化腳本以shell腳本的編程語言組織,shell腳本作為基礎知識在此不展開說明。一般情況 下,初始化腳本源碼保存在軟件的files目錄,且后綴為“.init”,例如:

tina/package/system/fstools/files/fstab.init

在Makefile的install中把初始化腳本安裝到小機端的/etc/init.d中,例如:

define Package/block-mount/install $(INSTALL_DIR) $(1)/etc/init.d/ $(INSTALL_BIN) ./files/fstab.init $(1)/etc/init.d/fstab endef

10.2.2.1調用自啟動腳本.

手動調用方式在啟動的時候會有太多的log,且log信息已被logd守護進程收集,不利于我們 調試初始化腳本,此時可通過小機端的命令行手動調用的形式來調試,例如:

root@TinaLinux: /# /etc/init.d/fstab start

10.2.2.2 sysV格式腳本

sysV式的初始化腳本保存在小機端的/etc/init.d/目錄下,實現開機自啟動。下例以最小內容的初 始化腳本作示例講解,核心是實現start/stop函數:

#!/bin/sh /etc/rc.common # Example script # Copyright (C) 2007 OpenWrt.org START=10 STOP=15 DEPEND=xxxx start() { #commands to launch application } stop() { #commands to kill application } 注意: START=10, 指明開機啟動優先級(序列) [數值越小, 越先啟動],取值范圍0-99。 STOP=15, 指明關機停止優先級(序列) [數值越小, 越先關閉],取值范圍0-99。 DEPEND=xxxx, 指明初始化腳本會并行執行,通過此項配置確保執行的依賴。

名稱 屬性 功能
start 必須實現 啟動一個服務
stop 必須實現 停止一個服務
reload 可選實現 重啟一個服務
enable 可選實現 重新加載服務
disable 可選實現 禁用服務

在shell里面可以使用如下的命令來操作相關的服務。

$ root@TinaLinux:/# /etc/init.d/exmple restart|start|stop|reload|enable|disable

10.2.2.3 procd格式腳本

以下例的初始化腳本作示例講解,主要是實現函數start_service:

#!/bin/sh /etc/rc.common USE_PROCD=1 PROG=xxxx START=10 STOP=15 DEPEND=xxxx start_service() { procd_open_instance procd_set_param command $PROG -f ...... procd_close_instance }

詳細的介紹可以參考:https://wiki.openwrt.org/inbox/procd-init-scripts

10.3應用調試

新添加的軟件默認配置為不使能,此時需要手動配置使能軟件包。通過在tina的根目錄執行 make menuconfig進入軟件包的配置界面:

圖10-1:應用配置主界面

軟件包的所在路徑與軟件包的Makefile中的定義有關,以fstools為例,在Makefile中定義 為:

define Package/fstools SECTION:=base CATEGORY:=Base system DEPENDS:=+ubox +USE_GLIBC:librt +NAND_SUPPORT:ubi-utils TITLE:=OpenWrt filesystem tools MENU:=1 endef

此時,只需要在menuconfig界面中進入Basy system即可找到fstools的軟件包。

圖10-2:軟件包所在界面

前綴符號含義:

[*] 或<*> : 編譯進入SDK [ ] 或< > : 不包含

支持操作:

Y或y:選擇包含 N或n:取消選擇

10.4應用編譯

詳見重編應用章節。

10.5應用安裝

獲取安裝包

安裝包一般位于目錄:

tina/out/<方案>/packages/base

安裝包命名格式為:

<應用名>_<應用版本>-<應用釋放版本>_sunxi.ipk

安裝應用包

通過adb推送安裝包到小機:

$ adb push <安裝包路徑> <推送到小機路徑>

安裝應用包:

$ opkg install <安裝包路徑>

10.6分區與掛載

升級分區

分區 功能
boot分區 存內核鏡像
rootfs分區 基礎系統鏡像分區,包含/lib,/bin,/etc等
recovery分區 存放恢復系統鏡像,僅大容量方案有,詳見OTA文檔
extend分區 存放恢復系統鏡像及rootfs的usr部分,僅小容量方案有,詳見OTA文檔

不升級分區

分區 功能
private分區 存儲SN號分區
misc分區 系統狀態、刷機狀態分區
UDISK分區 用戶數據分區,一般掛載在/mnt/UDISK
overlayfs分區 存儲overlayfs覆蓋數據

默認掛載點

分區 掛載點 備注
/dev/by-name/boot /boot
/dev/by-name/boot-res /boot-res
/dev/by-name/UDISK /mnt/UDISK 用戶數據分區
/dev/mmcblk0或/dev/mmcblk0p1 /mnt/SDCARD Tf卡掛載點
/dev/by-name/rootfs_data /overlay 存儲overlayfs覆蓋數據

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210398
  • 系統軟件
    +關注

    關注

    0

    文章

    39

    瀏覽量

    11005
  • Tina
    +關注

    關注

    2

    文章

    45

    瀏覽量

    17027
收藏 人收藏

    評論

    相關推薦

    Tina_Linux系統裁剪開發指南

    Tina_Linux系統裁剪開發指南1 概述2 Tina系統裁剪簡介2.1 boot0裁剪2.2 uboot裁剪2.3 內核裁剪2.3.1
    的頭像 發表于 03-06 09:52 ?1626次閱讀

    MSP430 軟件開發指南

    MSP430 軟件開發指南
    發表于 08-01 09:47

    Rockchip RK3399軟件開發指南

    本文檔主要介紹 Rockchip RK3399 軟件開發指南,旨在幫助軟件開發工程師更快上手 RK3399 的開發及調試。
    發表于 10-10 07:15

    基于MSP430軟件開發指南

    基于MSP430軟件開發指南
    發表于 10-13 15:49 ?23次下載
    基于MSP430<b class='flag-5'>軟件開發指南</b>

    Tina Linux配置開發指南

    Tina Linux配置開發指南
    的頭像 發表于 03-02 15:28 ?1.7w次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b>配置<b class='flag-5'>開發指南</b>

    Linux NOR開發指南

    Linux NOR開發指南
    的頭像 發表于 03-06 09:55 ?1030次閱讀
    <b class='flag-5'>Linux</b> NOR<b class='flag-5'>開發指南</b>

    Versal ACAP系統軟件開發人員指南

    電子發燒友網站提供《Versal ACAP系統軟件開發人員指南.pdf》資料免費下載
    發表于 09-13 15:20 ?0次下載
    Versal ACAP<b class='flag-5'>系統軟件開發</b>人員<b class='flag-5'>指南</b>

    Rockchip RK3399軟件開發指南

    電子發燒友網站提供《Rockchip RK3399軟件開發指南.pdf》資料免費下載
    發表于 10-09 14:30 ?14次下載
    Rockchip RK3399<b class='flag-5'>軟件開發指南</b>

    keil arm軟件開發指南

    電子發燒友網站提供《keil arm軟件開發指南.pdf》資料免費下載
    發表于 01-26 15:51 ?7次下載

    BQ769x2 軟件開發指南

    電子發燒友網站提供《BQ769x2 軟件開發指南.pdf》資料免費下載
    發表于 08-12 14:41 ?0次下載

    BQ769x2軟件開發指南

    電子發燒友網站提供《BQ769x2軟件開發指南.pdf》資料免費下載
    發表于 08-26 09:12 ?1次下載
    BQ769x2<b class='flag-5'>軟件開發指南</b>

    TUSS44x0軟件開發指南

    電子發燒友網站提供《TUSS44x0軟件開發指南.pdf》資料免費下載
    發表于 09-14 10:59 ?0次下載
    TUSS44x0<b class='flag-5'>軟件開發指南</b>

    PGA450-Q1軟件開發指南

    電子發燒友網站提供《PGA450-Q1軟件開發指南.pdf》資料免費下載
    發表于 09-30 14:25 ?0次下載
    PGA450-Q1<b class='flag-5'>軟件開發指南</b>

    PGA460軟件開發指南

    電子發燒友網站提供《PGA460軟件開發指南.pdf》資料免費下載
    發表于 10-09 10:30 ?1次下載
    PGA460<b class='flag-5'>軟件開發指南</b>

    BQ7690x軟件開發指南

    電子發燒友網站提供《BQ7690x軟件開發指南.pdf》資料免費下載
    發表于 11-07 10:19 ?1次下載
    BQ7690x<b class='flag-5'>軟件開發指南</b>
    主站蜘蛛池模板: 色综合中文字幕 | 久久久久久人精品免费费看 | 午夜一区二区三区 | 亚洲一本高清 | 亚洲情a成黄在线观看 | 日本亚洲精品色婷婷在线影院 | 黄色欧美 | 女人张开腿男人桶 | 天天操天天干天天射 | 奇米777me | 美女性视频网站 | 天天做天天爱天天爽天天综合 | 国语一区| 一级视频在线观看 | 狼色影院 | 国产青青草 | 日韩精品一区二区三区免费视频 | 依人成人 | 狠狠干网址 | 美女被上视频 | 欧美激情片网站 | 五月天丁香婷婷综合 | 毛片毛多| 国产精品三级国语在线看 | 亚洲人成亚洲人成在线观看 | 一级毛片免费网站 | tueb69xxxxxhd日本| 日本亚洲卡一卡2卡二卡三卡四卡 | 97干干 | 日本精品一在线观看视频 | 韩国在线a免费观看网站 | 四虎东方va私人影库在线观看 | 男女视频在线观看免费高清观看 | 成人精品第一区二区三区 | 最近高清免费观看视频 | 成人a毛片高清视频 | 深爱激情五月网 | 欧美成人免费夜夜黄啪啪 | 2021天天干 | 日本久久久久久久 | 国产精品视频久久久久 |