国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在嵌入式Linux設(shè)備上使用Flutter開發(fā)圖形界面(試水)

這篇具有很好參考價值的文章主要介紹了在嵌入式Linux設(shè)備上使用Flutter開發(fā)圖形界面(試水)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

安裝Docker

鏈接: https://www.bilibili.com/video/BV1qE411N7aC/?spm_id_from=333.880.my_history.page.click&vd_source=0c443477abedebf2fdf7abecef55405d
我是跟著這個視頻安裝 Docker Desktop for Windows + 啟用k8s
k8s網(wǎng)址
https://github.com/AliyunContainerService/k8s-for-docker-desktop

嘗試交叉編譯

主要步驟參照 https://www.toradex.com/zh-cn/blog/zai-qian-ru-shi-linux-she-bei-shang-shi-yong-flutter-kai-fa-tu-xing-jie-mian 網(wǎng)址的內(nèi)容(寫的很好~)

以下是我一路踩坑填坑的血淚史啦~~~~

首先一個ubuntu20.04容器

1、創(chuàng)建容器 flutter_build或再次進入容器

~$ docker pull ubuntu:20.04
~$ docker run -it -v /home/user/flutter:/opt/flutter --name flutter_build ubuntu:20.04 /bin/bash

上述的 /home/user/flutter是對應(yīng)在本機上準備的路徑,比如我在E:\workspace_E\Desker\flutter_docker新建了一個目錄,即如下:

~$ docker run -it -v E:\workspace_E\Desker\flutter_docker:/opt/flutter --name flutter_build ubuntu:20.04 /bin/bash

即將E:\workspace_E\Desker\flutter_docker 映射到容器內(nèi)的**/opt/flutter**下。

后續(xù)進入改容器重新編譯,即輸入以下命令:

~$ docker container start flutter_build
~$ docker exec -it flutter_build bash

flutter_build 就是之前創(chuàng)建時容器的名稱,你可以在Docker看到。

2、安裝所需軟件

# apt update
# apt upgrade
# apt install clang cmake build-essential pkg-config libegl1-mesa-dev libxkbcommon-dev libgles2-mesa-dev
# apt install libwayland-dev wayland-protocols git curl wget unzip git
# apt install python2
# apt install virtualenv

3、下載編譯工具

# mkdir -p /opt/flutter
# cd /opt/flutter
# git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
# export PATH=$PATH:$(pwd)/depot_tools

注意:如果

4、創(chuàng)建python2環(huán)境

默認的 ubuntu:20.04 使用 Python3,在容器里使用 virtualenv 創(chuàng)建 Python2 環(huán)境。

# virtualenv .env -p python2
# source .env/bin/activate

5、創(chuàng)建 .gclient文件并指定版本

# cat .gclient
solutions = [
{
  "managed": False,
  "name": "src/flutter",
  "url": "https://github.com/flutter/engine.git@bd539267b42051b0da3d16ffa8f48949dce8aa8f",
  "custom_deps": {},
  "deps_file": "DEPS",
  "safesync_url": "",
  "custom_vars" : {
    "download_android_deps" : False,
    "download_windows_deps" : False,
  },
},
]

上面的 bd539267b42051b0da3d16ffa8f48949dce8aa8f 對應(yīng) ${path_to_flutter_sdk_install}/flutter/bin/internal/engine.version,兩者需要一致。如果不指定的話,會下載最新的版本。除非確實需要編譯最新版本的 Engine,否則并不推薦。

我是這樣做的:
進入 /opt/flutter 目錄

$ cd /opt/flutter

然后使用 echo 命令和重定向操作符>來創(chuàng)建 .gclient文件并將第一行寫入。

$ echo `solutions = ['>.gclient

然后 ls,你可以看到目錄下已經(jīng)生成了一個.gclient 文件
在本機對應(yīng)的映射地址處用筆記本打開,直接復(fù)制上去保存即可。

最后,獲取代碼

$ gclient sync

6、編譯embbedder

這里編譯為arm64 目標 release 模式的 embedder

# cd src
# ./flutter/tools/gn --target-os linux --linux-cpu arm64 --runtime-mode release --embedder-for-target --disable-desktop-embeddings --no-build-embedder-examples
# ninja -C out/linux_release_arm64

在這里,報了不少錯,以下是解決方法:
1)

(.env) root@0e5187d0fb8b:/opt/flutter/src# ./flutter/tools/gn --target-os linux --linux-cpu arm64 --runtime-mode release --embedder-for-target --disable-desktop-embeddings --no-build-embedder-examples
GOMA usage was specified but can't be found, falling back to local builds. Set the GOMA_DIR environment variable to fix GOMA.
Tried to download prebuilt Dart SDK but an appropriate version could not be found!
Either retry by running flutter/tools/download_dart_sdk.py manually or compile from source by setting `--no-prebuilt-dart-sdk` flag to tools/gn
Generating GN files in: out/linux_release_arm64
Traceback (most recent call last):
  File "./flutter/tools/gn", line 589, in <module>
    sys.exit(main(sys.argv))
  File "./flutter/tools/gn", line 581, in main
    gn_call_result = subprocess.call(command, cwd=SRC_ROOT)
  File "/usr/lib/python3.8/subprocess.py", line 340, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1704, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/opt/flutter/src/flutter/third_party/gn/gn'
User
(.env) root@0e5187d0fb8b:/opt/flutter/src# ninja -C out/linux_release_arm64
depot_tools/ninja.py: Could not find Ninja in the third_party of the current project, nor in your PATH.
Please take one of the following actions to install Ninja:
- If your project has DEPS, add a CIPD Ninja dependency to DEPS.
- Otherwise, add Ninja to your PATH *after* depot_tools.

解決方法:

$ apt-get update
$ apt-get install ninja-build
(.env) root@0e5187d0fb8b:/opt/flutter/src# ninja -C out/linux_release_arm64
ninja: Entering directory `out/linux_release_arm64'
ninja: error: loading 'build.ninja': No such file or directory

解決方法:
1、首先需要確定GN是否已經(jīng)運行并成功生成了build.ninja。你可以通過在out/linux_release_arm64目錄中運行ls命令來查看文件是否存在。
2、如果build.ninja文件不存在,需要運行GN來生成它??梢栽?code>src目錄下運行如下的GN命令:

./flutter/tools/gn --target-os linux --linux-cpu arm64 --runtime-mode release --embedder-for-target --disable-desktop-embeddings --no-build-embedder-examples

這個命令告訴GN為ARM64架構(gòu)的Linux生成Flutter Engine 的發(fā)布版。
3、運行完GN命令后,你應(yīng)該可以在out/linux_release_arm64目錄下看到build.ninja文件。這是,可以再次運行Ninja開始構(gòu)建:

$ ninja -C out/linux_release_arm64
(.env) root@0e5187d0fb8b:/opt/flutter/src# ./flutter/tools/gn --target-os linux --linux-cpu arm64 --runtime-mode release --embedder-for-target --disable-desktop-embeddings --no-build-embedder-examples
GOMA usage was specified but can't be found, falling back to local builds. Set the GOMA_DIR environment variable to fix GOMA.
Using prebuilt Dart SDK binary. If you are editing Dart sources and wish to compile the Dart SDK, set `--no-prebuilt-dart-sdk`.
Generating GN files in: out/linux_release_arm64
ERROR at //build/config/linux/pkg_config.gni:103:17: Script returned non-zero exit code.
    pkgresult = exec_script(pkg_config_script, args, "value")
                ^----------
Current dir: /opt/flutter/src/out/linux_release_arm64/
Command: python3 /opt/flutter/src/build/config/linux/pkg-config.py -s /opt/flutter/src/build/linux/debian_sid_arm64-sysroot -a arm64 freetype2
Returned 1.
stderr:

Traceback (most recent call last):
  File "/opt/flutter/src/build/config/linux/pkg-config.py", line 249, in <module>
    sys.exit(main())
  File "/opt/flutter/src/build/config/linux/pkg-config.py", line 144, in main
    prefix = GetPkgConfigPrefixToStrip(options, args)
  File "/opt/flutter/src/build/config/linux/pkg-config.py", line 82, in GetPkgConfigPrefixToStrip
    prefix = subprocess.check_output([options.pkg_config,
  File "/usr/lib/python3.8/subprocess.py", line 415, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "/usr/lib/python3.8/subprocess.py", line 493, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1704, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'pkg-config'

See //build/config/linux/BUILD.gn:30:1: whence it was called.
pkg_config("freetype2") {
^------------------------
See //build/config/BUILDCONFIG.gn:357:33: which caused the file to be included.
  _native_compiler_configs += [ "http://build/config/linux:sdk" ]
                                ^-------------------------

解決方法:

$ apt-get update
$ apt-get install pkg-config
$ apt-get install libfreetype6-dev
GOMA usage was specified but can't be found, falling back to local builds. Set the GOMA_DIR environment variable to fix GOMA.
Using prebuilt Dart SDK binary. If you are editing Dart sources and wish to compile the Dart SDK, set `--no-prebuilt-dart-sdk`.
Generating GN files in: out/linux_release_arm64

上述表示已經(jīng)成功地通過了 gn生成步驟。生成GN文件是構(gòu)建過程的一部分,這些文件指導了下一步的構(gòu)建過程。在這個步驟,你可能看到有關(guān)GOMA的警告,但你可以暫時忽略它,因為它主要用于加速構(gòu)建過程。

接下來,可以運行下面的命令構(gòu)建代碼:

ninja -C out/linux_release_arm64

請注意,構(gòu)建過程可能需要一些時間,并且可能會需要大量的磁盤空間。在構(gòu)建完成后,你應(yīng)該會在 out/linux_release_arm64 目錄下看到你的構(gòu)建結(jié)果。

ERROR at //build/config/linux/pkg_config.gni:103:17: Script returned non-zero exit code.
    pkgresult = exec_script(pkg_config_script, args, "value")
                ^----------
Current dir: /opt/flutter/src/out/linux_release_arm64/
Command: python3 /opt/flutter/src/build/config/linux/pkg-config.py -s /opt/flutter/src/build/linux/debian_sid_arm64-sysroot -a arm64 freetype2
Returned 1.

解決方法:
還是因為環(huán)境中沒有找到pkg-config,

apt-get update
apt-get install pkg-config
apt-get install libfreetype6-dev

第二步創(chuàng)建一個arm64的容器

1、選擇合適的鏡像

在嵌入式Linux設(shè)備上使用Flutter開發(fā)圖形界面(試水),Flutter,linux,flutter,運維
這是我選的鏡像,其他的都嘗試了幾個都有不同程度的bug,有更好的話,請評論推薦哈~~

2、創(chuàng)建Container

首先同樣在本機創(chuàng)建一個文件夾作為映射地址
在嵌入式Linux設(shè)備上使用Flutter開發(fā)圖形界面(試水),Flutter,linux,flutter,運維

$ docker run -it -v E:\workspace_E\Desker\torizon\workspace:/opt/workspace torizon/arm64v8-debian-base /bin/bash

3、在容器中安裝所需的軟件

# apt update
# apt install clang cmake build-essential pkg-config libegl1-mesa-dev libxkbcommon-dev libgles2-mesa-dev
# apt install unzip git
# apt install curl wget
# apt install libwayland-dev wayland-protocols
# apt install libdrm-dev libgbm-dev libinput-dev libudev-dev libsystemd-dev

4、下載 flutter-embedded-linux代碼

# cd /opt/workspace
# git clone https://github.com/sony/flutter-embedded-linux.git
# cd flutter-embedded-linux/
# mkdir build

5、編譯生成 flutter-clientlibflutter_elinux_wayland.so兩個文件

參照網(wǎng)址:https://github.com/sony/flutter-embedded-linux/wiki/Building-Embedded-Linux-embedding-for-Flutter

# cd build
# cmake -DUSER_PROJECT_PATH=examples/flutter-wayland-client -DCMAKE_BUILD_TYPE=Release ..
# cmake -DUSER_PROJECT_PATH=examples/flutter-wayland-client -DCMAKE_BUILD_TYPE=Release -DBUILD_ELINUX_SO=ON -DBACKEND_TYPE=WAYLAND -DENABLE_ELINUX_EMBEDDER_LOG=OFF -DFLUTTER_RELEASE=ON ..
# cmake --build .

很好,目前最大的坑來了,只生成了libflutter_elinux_wayland.so文件,并沒有生成flutter-client文件~
正在找問題在哪里~~

第三步交叉編譯

1、回到flutter_build容器

$ docker exec -it flutter_build bash

2、下載 ``flutter-elinux.

這個是Flutter SDK

$ cd /opt/flutter/
$ git clone https://github.com/sony/flutter-elinux
$ export PATH=$PATH:/opt/flutter/flutter-elinux/bin

運行下面命令查看安裝情況

$ flutter-elinux doctor
$ flutter-elinux devices

3、創(chuàng)建一個示例工程

$ flutter-elinux create demo1
$ cd demo1

4、復(fù)制并打包

在本機上cmd上

$ docker ps -a

在嵌入式Linux設(shè)備上使用Flutter開發(fā)圖形界面(試水),Flutter,linux,flutter,運維

$ docker cp ce88db40402c:/ arm64-sysroot
$ tar cvf arm64-sysroot.tar arm64-sysroot

注意打包的路徑,找到 arm64-sysroot.tar 復(fù)制到 flutter_build 容器中。

5、解壓

$ cd /opt/flutter
$ tar vxf arm64-sysroot.tar

6、編譯

$ cd demo1
$ flutter-elinux build elinux --target-arch=arm64 --target-sysroot=/opt/flutter/arm64-sysroot --target-compiler-triple=aarch64-linux-gnu

編譯結(jié)束查看 build/elinux/arm64/release/bundle,這里是 Flutter app 運行所需的所以文件。

$ tree build/elinux/arm64/release/bundle -L 2

在嵌入式Linux設(shè)備上使用Flutter開發(fā)圖形界面(試水),Flutter,linux,flutter,運維
后面還在嘗試中~~

相關(guān)資料查詢
[1] https://github.com/sony/flutter-elinux/wiki/Building-flutter-apps#3-cross-building-from-x64-to-arm64;
[2]https://github.com/sony/flutter-embedded-linux/wiki/Building-Flutter-Engine-from-source
[3]https://github.com/sony/flutter-elinux/issues/140
[4]文章來源地址http://www.zghlxwxcb.cn/news/detail-832705.html

到了這里,關(guān)于在嵌入式Linux設(shè)備上使用Flutter開發(fā)圖形界面(試水)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 正點原子嵌入式linux驅(qū)動開發(fā)——U-boot圖形化配置及其原理

    正點原子嵌入式linux驅(qū)動開發(fā)——U-boot圖形化配置及其原理

    經(jīng)過之前對uboot的學習可以知道: uboot可以通過stm32mp15_trusted_defconfig來配置,或者通過文件stm32mp1.h來配置uboot 。還有 另外一種配置uboot的方法,就是圖形化配置 ,以前的uboot是不支持圖形化配置,只有Linux內(nèi)核才支持圖形化配置。不過不知道從什么時候開始,uboot也 支持圖形

    2024年02月07日
    瀏覽(26)
  • 嵌入式Linux系統(tǒng)中的設(shè)備驅(qū)動開發(fā):從設(shè)備樹到驅(qū)動實現(xiàn)

    嵌入式Linux系統(tǒng)中的設(shè)備驅(qū)動開發(fā):從設(shè)備樹到驅(qū)動實現(xiàn)

    大家好,今天給大家介紹 嵌入式Linux系統(tǒng)中的設(shè)備驅(qū)動開發(fā):從設(shè)備樹到驅(qū)動實現(xiàn) ,文章末尾附有分享大家一個資料包,差不多150多G。里面學習內(nèi)容、面經(jīng)、項目都比較新也比較全! 可進群免費領(lǐng)取。 在嵌入式Linux系統(tǒng)中,設(shè)備驅(qū)動是連接硬件設(shè)備和操作系統(tǒng)之間的橋梁。

    2024年02月19日
    瀏覽(25)
  • 嵌入式Linux驅(qū)動開發(fā)——解決/sys/bus/spi/devices下沒有對應(yīng)的spi設(shè)備文件

    嵌入式Linux驅(qū)動開發(fā)——解決/sys/bus/spi/devices下沒有對應(yīng)的spi設(shè)備文件

    最近在學習Linux驅(qū)動開發(fā)中SPI總線的驅(qū)動框架,但在修改完設(shè)備樹添加完對應(yīng)的spi設(shè)備節(jié)點后,理應(yīng)在/sys/bus/spi下會有對應(yīng)的spi設(shè)備,我的目錄下面沒有。 無spi設(shè)備 然后我查看了/proc/device-tree,發(fā)現(xiàn)有對應(yīng)的spi設(shè)備節(jié)點,我就先沒有過多理會這個問題。 /proc/device-tree下有對應(yīng)

    2024年02月16日
    瀏覽(23)
  • 實時嵌入式Linux設(shè)備基準測試快速入門3實時嵌入式Linux

    實時嵌入式Linux設(shè)備基準測試快速入門3實時嵌入式Linux

    計算機系統(tǒng)與環(huán)境之間的交互通常是實時發(fā)生的,因此,對于作為計算機系統(tǒng)一部分的嵌入式設(shè)備來說,有關(guān)實時操作系統(tǒng)的討論也是一個重要話題。 本章將討論實時系統(tǒng)的特點,介紹在Linux嵌入式設(shè)備上實現(xiàn)實時性的主要方法。具體來說,本章將重點分析PREEMPT_RT內(nèi)核補丁,

    2024年02月15日
    瀏覽(25)
  • 【嵌入式Linux內(nèi)核驅(qū)動】04_Jetson nano GPIO應(yīng)用 | 驅(qū)動開發(fā) | 官方gpiolib、設(shè)備樹與chip_driver

    【嵌入式Linux內(nèi)核驅(qū)動】04_Jetson nano GPIO應(yīng)用 | 驅(qū)動開發(fā) | 官方gpiolib、設(shè)備樹與chip_driver

    0.暴露給應(yīng)用層 應(yīng)用 解決調(diào)試目錄為空的問題 調(diào)試信息 1.最簡讀寫文件(在/SYS下) 設(shè)備樹 驗證測試 編譯文件 驅(qū)動 of_get_named_gpio_flags //獲取設(shè)備樹節(jié)點的屬性 gpio_is_valid //判斷是否合法 devm_gpio_request //申請使用gpio,并調(diào)用設(shè)置pinctrl device_create_file //根據(jù)設(shè)備樹節(jié)點屬性,創(chuàng)建

    2024年02月07日
    瀏覽(54)
  • 嵌入式開發(fā),如何防止設(shè)備被抄襲?

    嵌入式開發(fā),如何防止設(shè)備被抄襲?

    在國內(nèi)做產(chǎn)品設(shè)計開發(fā),很難避免被抄襲,被仿照。在沒有形成技術(shù)壁壘之前,如何防止產(chǎn)品被抄襲是一個不可回避的問題。 常規(guī)設(shè)備主要的防護手段有: 專利保護 加密保護代碼 授權(quán)校驗 持續(xù)更新和改進 對于一些比較重要的技術(shù)發(fā)明或是創(chuàng)新,應(yīng)該盡快申請專利。雖然目

    2024年02月08日
    瀏覽(30)
  • 嵌入式圖形庫開發(fā)絢麗界面(lvgl、emwin、awtk)

    嵌入式圖形庫開發(fā)絢麗界面(lvgl、emwin、awtk)

    ? ? ? ? 早些年的單片機開發(fā)中,很多都是使用文字菜單界面,這種界面讓人感覺非常的樸實無華,內(nèi)容言簡意賅,如果使用圖形庫進行開發(fā),你的產(chǎn)品一下子就讓別人覺得有點高級,更容易去接收它。對于現(xiàn)在來說,很多的嵌入式圖形庫都可以做出絢麗的界面,占用RAM小,

    2024年01月25日
    瀏覽(26)
  • 嵌入式linux設(shè)備網(wǎng)口帶寬-測試方法

    嵌入式linux設(shè)備網(wǎng)口帶寬-測試方法

    iperf是一個基于Client/Server的網(wǎng)絡(luò)性能測試工具,可以測試TCP、UDP和SCTP帶寬質(zhì)量,能夠提供網(wǎng)絡(luò)吞吐率信息,以及震動、丟包率,最大段和最大傳輸單元大小等統(tǒng)計信息,幫助我們測試網(wǎng)絡(luò)性能,定位網(wǎng)絡(luò)瓶頸。其中抖動和丟包率適應(yīng)于UDP測試,二帶寬測試適應(yīng)于TCP和UDP。 一

    2024年02月10日
    瀏覽(23)
  • 嵌入式Linux(8):字符設(shè)備驅(qū)動--注冊字符類設(shè)備

    雜項設(shè)備 注冊雜項設(shè)備: 注銷雜項設(shè)備: 字符類設(shè)備 文件:include/linux/cdev.h 步驟流程: 定義一個cdev結(jié)構(gòu)體。 使用cdev_init函數(shù)初始化cdev結(jié)構(gòu)體成員變量。 參數(shù): 第一個:要初始化的cdev結(jié)構(gòu)體 第二個:文件操作集: cdev-ops = fops;//實際就是把文件操作集寫ops 使用cdev_add函數(shù)

    2023年04月22日
    瀏覽(24)
  • 使用Yocto進行嵌入式Linux開發(fā)3 Toaster

    使用Yocto進行嵌入式Linux開發(fā)3 Toaster

    我們已經(jīng)知道了如何在Poky中使用BitBake構(gòu)建圖像image,那么我們將學習如何使用Toaster完成同樣的操作。 Toaster是一個用于配置和運行構(gòu)建的Web接口。它與BitBake和Poky構(gòu)建系統(tǒng)通信,以管理和收集有關(guān)構(gòu)建、軟件包和鏡像的信息。 使用Toaster的兩種方法: 本地 可以將Toaster作為本

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包