99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙OpenHarmony開(kāi)發(fā)板解析:【Rust模塊配置規(guī)則和指導(dǎo)】

jf_46214456 ? 來(lái)源: jf_46214456 ? 作者: jf_46214456 ? 2024-05-10 11:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

Rust是一門(mén)靜態(tài)強(qiáng)類(lèi)型語(yǔ)言,具有更安全的內(nèi)存管理、更好的運(yùn)行性能、原生支持多線(xiàn)程開(kāi)發(fā)等優(yōu)勢(shì)。Rust官方也使用Cargo工具來(lái)專(zhuān)門(mén)為Rust代碼創(chuàng)建工程和構(gòu)建編譯。 OpenHarmony為了集成C/C++代碼和提升編譯速度,使用了GN + Ninja的編譯構(gòu)建系統(tǒng)。GN的構(gòu)建語(yǔ)言簡(jiǎn)潔易讀,Ninja的匯編級(jí)編譯規(guī)則直接高效。 為了在OpenHarmony中集成Rust代碼,并最大程度發(fā)揮Rust和OpenHarmony中原有C/C++代碼的交互性,采用GN作為統(tǒng)一構(gòu)建工具,即通過(guò)GN構(gòu)建Rust源碼文件(xxx.rs),并增加與C/C++互操作、編譯時(shí)lint、測(cè)試、IDL轉(zhuǎn)換、三方庫(kù)集成、IDE等功能。同時(shí)擴(kuò)展gn框架,支持接口自動(dòng)化轉(zhuǎn)換,最大程度簡(jiǎn)化開(kāi)發(fā)。

基本概念

術(shù)語(yǔ)描述
CargoCargo是Rust官方使用的構(gòu)建工具,允許Rust項(xiàng)目聲明其各種依賴(lài)項(xiàng),并確保您始終獲得可重復(fù)的構(gòu)建。
cratecrate是一個(gè)獨(dú)立的可編譯單元。
LintLint是指出常見(jiàn)編程錯(cuò)誤、錯(cuò)誤、樣式錯(cuò)誤和可疑結(jié)構(gòu)的工具??梢詫?duì)程序進(jìn)行更加廣泛的錯(cuò)誤分析。

配置規(guī)則

OpenHarmony提供了用于Rust代碼編譯構(gòu)建的各類(lèi)型GN模板,可以用于編譯Rust可執(zhí)行文件,動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)等。各類(lèi)型模板說(shuō)明如下:

GN模板功能輸出
ohos_rust_executablerust可執(zhí)行文件rust可執(zhí)行文件,不帶后綴
ohos_rust_shared_liaryrust動(dòng)態(tài)庫(kù)rust dylib動(dòng)態(tài)庫(kù),默認(rèn)后綴.dylib.so
ohos_rust_static_liaryrust靜態(tài)庫(kù)rust rlib靜態(tài)庫(kù),默認(rèn)后綴.rlib
ohos_rust_proc_macrorust proc_macrorust proc_macro庫(kù), 默認(rèn)后綴.so
ohos_rust_shared_ffirust FFI動(dòng)態(tài)庫(kù)rust cdylib動(dòng)態(tài)庫(kù),給C/C++模塊調(diào)用,默認(rèn)后綴.so
ohos_rust_static_ffirust FFI靜態(tài)庫(kù)rust staticlib庫(kù),給C/C++模塊調(diào)用,默認(rèn)后綴.a
ohos_rust_cargo_crate三方包Cargo craterust三方crate,支持rlib、dylib、bin
ohos_rust_systemtestrust系統(tǒng)測(cè)試用例rust可執(zhí)行系統(tǒng)測(cè)試用例,不帶后綴
ohos_rust_unittestrust單元測(cè)試用例rust可執(zhí)行單元測(cè)試用例,不帶后綴
ohos_rust_fuzztestrust Fuzz測(cè)試用例rust可執(zhí)行Fuzz測(cè)試用例,不帶后綴

配置指導(dǎo)

配置Rust模塊與C/C++模塊類(lèi)似,參考[模塊配置規(guī)則]。下面是使用不同模板的示例。

開(kāi)發(fā)前請(qǐng)熟悉鴻蒙開(kāi)發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

配置Rust靜態(tài)庫(kù)示例

該示例用于測(cè)試Rust可執(zhí)行bin文件和靜態(tài)庫(kù)rlib文件的編譯,以及可執(zhí)行文件對(duì)靜態(tài)庫(kù)的依賴(lài),使用模板ohos_rust_executable和ohos_rust_static_library。操作步驟如下:

  1. 創(chuàng)建build/rust/tests/test_rlib_crate/src/simple_printer.rs,如下所示:
    //! simple_printer
    
    /// struct RustLogMessage
    
    pub struct RustLogMessage {
        /// i32: id
        pub id: i32,
        /// String: msg
        pub msg: String,
    }
    
    /// function rust_log_rlib
    pub fn rust_log_rlib(msg: RustLogMessage) {
        println!("id:{} message:{:?}", msg.id, msg.msg)
    }
    
  2. 創(chuàng)建build/rust/tests/test_rlib_crate/src/main.rs,如下所示:
    //! rlib_crate example for Rust.
    
    extern crate simple_printer_rlib;
    
    use simple_printer_rlib::rust_log_rlib;
    use simple_printer_rlib::RustLogMessage;
    
    fn main() {
        let msg: RustLogMessage = RustLogMessage {
            id: 0,
            msg: "string in rlib crate".to_string(),
        };
        rust_log_rlib(msg);
    }
    
  3. 配置gn腳本build/rust/tests/test_rlib_crate/BUILD.gn,如下所示:
    import("http://build/ohos.gni")
    
    ohos_rust_executable("test_rlib_crate") {
      sources = [ "src/main.rs" ]
      deps = [ ":simple_printer_rlib" ]
    }
    
    ohos_rust_static_library("simple_printer_rlib") {
      sources = [ "src/simple_printer.rs" ]
      crate_name = "simple_printer_rlib"
      crate_type = "rlib"
      features = [ "std" ]
    }
    
  4. 執(zhí)行編譯得到的可執(zhí)行文件,運(yùn)行結(jié)果如下:
    test_rlib_crate

配置三方庫(kù)示例

rust三方庫(kù)的BUILD.gn文件可通過(guò)cargo2gn工具自動(dòng)生成。參見(jiàn):[Cargo2gn工具操作指導(dǎo)]

該示例用于測(cè)試包含預(yù)編譯文件build.rs的三方靜態(tài)庫(kù)rlib文件的編譯,使用了模板ohos_rust_executable和ohos_rust_cargo_crate。操作步驟如下:

  1. 創(chuàng)建build/rust/tests/test_rlib_cargo_crate/crate/src/lib.rs,如下所示:
    include!(concat!(env!("OUT_DIR"), "/generated/generated.rs"));
    
    pub fn say_hello_from_crate() {
        assert_eq!(run_some_generated_code(), 45);
        #[cfg(is_new_rustc)]
        println!("Is new rustc");
        #[cfg(is_old_rustc)]
        println!("Is old rustc");
        #[cfg(is_ohos)]
        println!("Is ohos");
        #[cfg(is_mac)]
        println!("Is darwin");
        #[cfg(has_feature_a)]
        println!("Has feature_a");
        #[cfg(not(has_feature_a))]
        panic!("Wasn't passed feature_a");
        #[cfg(not(has_feature_b))]
        #[cfg(test_a_and_b)]
        panic!("feature_b wasn't passed");
        #[cfg(has_feature_b)]
        #[cfg(not(test_a_and_b))]
        panic!("feature_b was passed");
    }
    
    #[cfg(test)]
    mod tests {
        /// Test features are passed through from BUILD.gn correctly. This test is the target configuration.
        #[test]
        #[cfg(test_a_and_b)]
        fn test_features_passed_target1() {
            #[cfg(not(has_feature_a))]
            panic!("feature a was not passed");
            #[cfg(not(has_feature_b))]
            panic!("feature b was not passed");
        }
    
        #[test]
        fn test_generated_code_works() {
            assert_eq!(crate::run_some_generated_code(), 45);
        }
    }
    
  2. 創(chuàng)建build/rust/tests/test_rlib_cargo_crate/crate/src/main.rs,如下所示:
    pub fn main() {
        test_rlib_crate::say_hello_from_crate();
    }
    
  3. 創(chuàng)建build/rust/tests/test_rlib_cargo_crate/crate/build.rs,如下所示:
    use std::env;
    use std::path::Path;
    use std::io::Write;
    use std::process::Command;
    use std::str::{self, FromStr};
    
    fn main() {
        println!("cargo:rustc-cfg=build_script_ran");
        let my_minor = match rustc_minor_version() {
            Some(my_minor) = > my_minor,
            None = > return,
        };
    
        if my_minor >= 34 {
            println!("cargo:rustc-cfg=is_new_rustc");
        } else {
            println!("cargo:rustc-cfg=is_old_rustc");
        }
    
        let target = env::var("TARGET").unwrap();
    
        if target.contains("ohos") {
            println!("cargo:rustc-cfg=is_ohos");
        }
        if target.contains("darwin") {
            println!("cargo:rustc-cfg=is_mac");
        }
    
        let feature_a = env::var_os("CARGO_FEATURE_MY_FEATURE_A").is_some();
        if feature_a {
            println!("cargo:rustc-cfg=has_feature_a");
        }
        let feature_b = env::var_os("CARGO_FEATURE_MY_FEATURE_B").is_some();
        if feature_b {
            println!("cargo:rustc-cfg=has_feature_b");
        }
    
        // Some tests as to whether we're properly emulating various cargo features.
        assert!(Path::new("build.rs").exists());
        assert!(Path::new(&env::var_os("CARGO_MANIFEST_DIR").unwrap()).join("build.rs").exists());
        assert!(Path::new(&env::var_os("OUT_DIR").unwrap()).exists());
    
        // Confirm the following env var is set
        env::var_os("CARGO_CFG_TARGET_ARCH").unwrap();
    
        generate_some_code().unwrap();
    }
    
    fn generate_some_code() - > std::io::Result< () > {
        let test_output_dir = Path::new(&env::var_os("OUT_DIR").unwrap()).join("generated");
        let _ = std::fs::create_dir_all(&test_output_dir);
        // Test that environment variables from .gn files are passed to build scripts
        let preferred_number = env::var("ENV_VAR_FOR_BUILD_SCRIPT").unwrap();
        let mut file = std::fs::File::create(test_output_dir.join("generated.rs"))?;
        write!(file, "fn run_some_generated_code() - > u32 {{ {} }}", preferred_number)?;
        Ok(())
    }
    
    fn rustc_minor_version() - > Option< u32 > {
        let rustc_bin = match env::var_os("RUSTC") {
            Some(rustc_bin) = > rustc_bin,
            None = > return None,
        };
    
        let output = match Command::new(rustc_bin).arg("--version").output() {
            Ok(output) = > output,
            Err(_) = > return None,
        };
    
        let rustc_version = match str::from_utf8(&output.stdout) {
            Ok(rustc_version) = > rustc_version,
            Err(_) = > return None,
        };
    
        let mut pieces = rustc_version.split('.');
        if pieces.next() != Some("rustc 1") {
            return None;
        }
    
        let next_var = match pieces.next() {
            Some(next_var) = > next_var,
            None = > return None,
        };
    
        u32::from_str(next_var).ok()
    }
    
  4. 配置gn腳本build/rust/tests/test_rlib_cargo_crate/BUILD.gn,如下所示:
    import("http://build/templates/rust/ohos_cargo_crate.gni")
    
    ohos_cargo_crate("target") {
      crate_name = "test_rlib_crate"
      crate_root = "crate/src/lib.rs"
      sources = [ "crate/src/lib.rs" ]
    
      #To generate the build_script binary
      build_root = "crate/build.rs"
      build_sources = [ "crate/build.rs" ]
      build_script_outputs = [ "generated/generated.rs" ]
    
      features = [
        "my-feature_a",
        "my-feature_b",
        "std",
      ]
      rustflags = [
        "--cfg",
        "test_a_and_b",
      ]
      rustenv = [ "ENV_VAR_FOR_BUILD_SCRIPT=45" ]
    }
    
    # Exists to test the case that a single crate has both a library and a binary
    ohos_cargo_crate("test_rlib_crate_associated_bin") {
      crate_root = "crate/src/main.rs"
      crate_type = "bin"
      sources = [ "crate/src/main.rs" ]
    
      #To generate the build_script binary
      build_root = "crate/build.rs"
      build_sources = [ "crate/build.rs" ]
      features = [
        "my-feature_a",
        "my-feature_b",
        "std",
      ]
      rustenv = [ "ENV_VAR_FOR_BUILD_SCRIPT=45" ]
      deps = [ ":target" ]
    }
    
  5. 執(zhí)行編譯得到的可執(zhí)行文件,運(yùn)行結(jié)果如下:
    test_rlib_cargo_crate

其他源碼實(shí)例

在build/rust/tests目錄下有Rust各類(lèi)型模塊的配置實(shí)例可供參考:

用例目錄測(cè)試功能
build/rust/tests/test_bin_crate用ohos_rust_executable模板在host平臺(tái)編譯可執(zhí)行文件,在target平臺(tái)上運(yùn)行可執(zhí)行文件。
build/rust/tests/test_static_link測(cè)試可執(zhí)行文件對(duì)標(biāo)準(zhǔn)庫(kù)的靜態(tài)鏈接。
build/rust/tests/test_dylib_crate測(cè)試對(duì)動(dòng)態(tài)庫(kù)的編譯和動(dòng)態(tài)鏈接功能
build/rust/tests/test_rlib_crate測(cè)試對(duì)靜態(tài)庫(kù)的編譯和靜態(tài)鏈接功能
build/rust/tests/test_proc_macro_crate測(cè)試對(duì)Rust過(guò)程宏的編譯和鏈接功能。提供對(duì)不同類(lèi)型的宏的測(cè)試用例。
build/rust/tests/test_cdylib_crate測(cè)試將Rust代碼編譯成C/C++動(dòng)態(tài)庫(kù)。
build/rust/tests/test_staticlib_crate測(cè)試將Rust代碼編譯成C/C++靜態(tài)庫(kù)。
build/rust/tests/rust_test_ut測(cè)試Rust代碼單元測(cè)試模板功能(ability)。
build/rust/tests/rust_test_st測(cè)試Rust代碼系統(tǒng)測(cè)試模板功能(ability)。
build/rust/tests/test_bin_cargo_crate測(cè)試Rust三方可執(zhí)行文件的編譯和運(yùn)行。三方源碼中包含build.rs。
build/rust/tests/test_rlib_cargo_crate測(cè)試Rust三方靜態(tài)庫(kù)的編譯和靜態(tài)鏈接。三方源碼中包含build.rs。
build/rust/tests/test_proc_macro_cargo_crate測(cè)試Rust三方過(guò)程宏的編譯和鏈接。三方源碼中包含build.rs。
build/rust/tests/rust_test_fuzzb測(cè)試Rust代碼Fuzz測(cè)試模板功能。

參考

特性點(diǎn)實(shí)例

Rust源碼依賴(lài)調(diào)用C/C++庫(kù)

OpenHarmony上C/C++模塊動(dòng)態(tài)庫(kù)默認(rèn)用.z.so后綴,但是Rust的編譯命令通過(guò)-l鏈接時(shí),默認(rèn)只會(huì)鏈接.so后綴的動(dòng)態(tài)庫(kù)。因此如果要依賴(lài)一個(gè)C/C++動(dòng)態(tài)庫(kù)編譯模塊,需要在該動(dòng)態(tài)庫(kù)的GN構(gòu)建文件中添加output_extension = "so"的聲明,這樣編譯得到的動(dòng)態(tài)庫(kù)將會(huì)以".so"作為后綴,而不是".z.so"。 在Rust源碼中如果直接鏈接動(dòng)態(tài)庫(kù),后綴也需要使用".so",這時(shí)使用動(dòng)態(tài)庫(kù)的中間名,不需要添加lib前綴。例如Rust源碼中鏈接libhilog.so:

#[link(name = "hilog")]

externs使用

某個(gè)模塊如果依賴(lài)二進(jìn)制的rlib庫(kù),可以使用externs屬性:

executable("foo") {
    sources = [ "main.rs" ]
    externs = [{                    # 編譯時(shí)會(huì)轉(zhuǎn)成`--extern bar=path/to/bar.rlib`
        crate_name = "bar"
        path = "path/to/bar.rlib"
    }]
}

Lint規(guī)則

OpenHarmony框架支持rustc lints和clippy lints兩種Lint,每種Lint劃為三個(gè)等級(jí)的標(biāo)準(zhǔn):"openharmony"、"vendor"和"none",嚴(yán)格程度按照"openharmony" -> "vendor" -> "none"逐級(jí)遞減。 配置Rust模塊時(shí)可以通過(guò)rustc_lints和clippy_lints來(lái)指定使用Lint的等級(jí)。 模塊中沒(méi)有配置rustc_lints或者clippy_lints時(shí)會(huì)根據(jù)模塊所在路徑來(lái)匹配lints等級(jí)。不同路徑下的Rust代碼的語(yǔ)法規(guī)范會(huì)有不同程度地約束,因此用戶(hù)在OpenHarmony配置Rust代碼編譯模塊時(shí)還應(yīng)關(guān)注模塊所在路徑。

rustc lints和clippy lints的各等級(jí)標(biāo)志

lints類(lèi)型模塊屬性lints等級(jí)lints等級(jí)標(biāo)志lints內(nèi)容
rustc_lintsrustc_lintsopenharmonyRustOhosLints"-A deprecated", "-D missing-docs", "-D warnigngs"
rustc_lintsrustc_lintsvendorRustcVendorLints"-A deprecated", "-D warnigs"
rustc_lintsrustc_lintsnoneallowAllLints"-cap-lints allow"
clippy lintsclippy lintsopenharmonyClippyOhosLints"-A clippy::type-complexity", "-A clippy::unnecessary-wraps", "-A clippy::unusual-byte-groupings", "-A clippy::upper-case-acronyms"
clippy lintsclippy lintsvendorClippyVendorLints"-A clippy::complexity", "-A Clippy::perf", "-A clippy::style"
clippy lintsclippy lintsnoneallowAllLints"--cap-lints allow"

搜狗高速瀏覽器截圖20240326151450.png

代碼路徑與lints等級(jí)的對(duì)應(yīng)關(guān)系

路徑Lints等級(jí)
thirdpartynone
prebuiltsnone
vendorvendor
devicevendor
othersopenharmony

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5634

    瀏覽量

    103788
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    233

    瀏覽量

    7039
  • 鴻蒙
    +關(guān)注

    關(guān)注

    59

    文章

    2587

    瀏覽量

    43924
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3847

    瀏覽量

    18414
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙OpenHarmony開(kāi)發(fā)板:【產(chǎn)品配置規(guī)則

    產(chǎn)品解決方案為基于開(kāi)發(fā)板的完整產(chǎn)品,主要包含產(chǎn)品對(duì)OS的適配、部件拼裝配置、啟動(dòng)配置和文件系統(tǒng)配置等。產(chǎn)品解決方案的源碼路徑規(guī)則為:**ve
    的頭像 發(fā)表于 05-09 10:32 ?1567次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b><b class='flag-5'>開(kāi)發(fā)板</b>:【產(chǎn)品<b class='flag-5'>配置</b><b class='flag-5'>規(guī)則</b>】

    鴻蒙OpenHarmony開(kāi)發(fā)板解析:【 模塊配置規(guī)則

    編譯子系統(tǒng)通過(guò)模塊、部件和產(chǎn)品三層配置來(lái)實(shí)現(xiàn)編譯和打包。模塊就是編譯子系統(tǒng)的一個(gè)目標(biāo),包括(動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù)、配置文件、預(yù)編譯模塊等)。
    的頭像 發(fā)表于 05-10 14:39 ?1557次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>解析</b>:【 <b class='flag-5'>模塊</b><b class='flag-5'>配置</b><b class='flag-5'>規(guī)則</b>】

    鴻蒙OpenHarmony南向/北向快速開(kāi)發(fā)教程-迅為RK3568開(kāi)發(fā)板

    大家期待已久的迅為RK3568開(kāi)發(fā)板終于迎來(lái)了鴻蒙4.1系統(tǒng)的強(qiáng)勢(shì)支持!想知道如何實(shí)現(xiàn)快速開(kāi)發(fā)學(xué)習(xí)嗎?跟著我們一起來(lái)探索吧! 迅為RK3568開(kāi)發(fā)板: 想象一下,你手中的RK3568
    發(fā)表于 07-23 10:44

    TI DM388評(píng)估模塊開(kāi)發(fā)板開(kāi)發(fā)指導(dǎo)手冊(cè)

    TI DM388評(píng)估模塊開(kāi)發(fā)板開(kāi)發(fā)指導(dǎo)手冊(cè)
    發(fā)表于 11-25 18:06 ?15次下載

    openharmony開(kāi)發(fā)openharmony開(kāi)發(fā)板

    現(xiàn)在市面上支持OpenHarmony開(kāi)發(fā)板已經(jīng)非常多了,OpenHarmony不僅僅只能在海思系列芯片上運(yùn)行,比較常見(jiàn)的有HiSpark、小熊派系列。這些開(kāi)發(fā)板都是基于海思的Hi38
    的頭像 發(fā)表于 06-24 09:03 ?3973次閱讀

    [鴻蒙]OpenHarmony4.0的Rust開(kāi)發(fā)

    背景 Rust 是一門(mén)靜態(tài)強(qiáng)類(lèi)型語(yǔ)言,具有更安全的內(nèi)存管理、更好的運(yùn)行性能、原生支持多線(xiàn)程開(kāi)發(fā)等優(yōu)勢(shì)。Rust 官方也使用 Cargo 工具來(lái)專(zhuān)門(mén)為 Rust 代碼創(chuàng)建工程和構(gòu)建編譯
    的頭像 發(fā)表于 02-26 17:28 ?1278次閱讀
    [<b class='flag-5'>鴻蒙</b>]<b class='flag-5'>OpenHarmony</b>4.0的<b class='flag-5'>Rust</b><b class='flag-5'>開(kāi)發(fā)</b>

    瑞芯微RK3566鴻蒙開(kāi)發(fā)板OpenHarmony標(biāo)準(zhǔn)系統(tǒng)應(yīng)用兼容性測(cè)試指導(dǎo)

    本文OpenHarmony標(biāo)準(zhǔn)系統(tǒng)應(yīng)用兼容性測(cè)試指導(dǎo),適用鴻蒙系統(tǒng)軟件開(kāi)發(fā)測(cè)試的新手入門(mén)學(xué)習(xí)課程,設(shè)備為觸覺(jué)智能的瑞芯微RK3566開(kāi)發(fā)板
    的頭像 發(fā)表于 09-10 11:56 ?1205次閱讀
    瑞芯微RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>OpenHarmony</b>標(biāo)準(zhǔn)系統(tǒng)應(yīng)用兼容性測(cè)試<b class='flag-5'>指導(dǎo)</b>

    如何在開(kāi)源鴻蒙OpenHarmony開(kāi)啟SELinux模式?RK3566鴻蒙開(kāi)發(fā)板演示

    本文介紹開(kāi)源鴻蒙OpenHarmony系統(tǒng)下,開(kāi)啟/關(guān)閉SELinux權(quán)限的方法,觸覺(jué)智能Purple Pi OH鴻蒙開(kāi)發(fā)板演示,已適配全新Open
    的頭像 發(fā)表于 11-18 19:03 ?803次閱讀
    如何在開(kāi)源<b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b>開(kāi)啟SELinux模式?RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開(kāi)發(fā)板</b>演示

    OpenHarmony屬性信息怎么修改?觸覺(jué)智能RK3566鴻蒙開(kāi)發(fā)板來(lái)演示

    本文介紹開(kāi)源鴻蒙OpenHarmony系統(tǒng)下,修改產(chǎn)品屬性信息的方法,觸覺(jué)智能Purple Pi OH鴻蒙開(kāi)發(fā)板演示,已適配全新OpenHarmon
    的頭像 發(fā)表于 11-27 09:31 ?711次閱讀
    <b class='flag-5'>OpenHarmony</b>屬性信息怎么修改?觸覺(jué)智能RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開(kāi)發(fā)板</b>來(lái)演示

    OpenHarmony怎么修改DPI密度值?觸覺(jué)智能RK3566鴻蒙開(kāi)發(fā)板演示

    開(kāi)源鴻蒙OpenHarmony系統(tǒng)下,修改DPI密度值的方法,觸覺(jué)智能Purple Pi OH鴻蒙開(kāi)發(fā)板演示,搭載了瑞芯微RK3566四核處理器,Laval
    的頭像 發(fā)表于 12-24 11:46 ?683次閱讀
    <b class='flag-5'>OpenHarmony</b>怎么修改DPI密度值?觸覺(jué)智能RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開(kāi)發(fā)板</b>演示

    OpenHarmony源碼編譯后燒錄鏡像教程,RK3566鴻蒙開(kāi)發(fā)板演示

    本文介紹瑞芯微主板/開(kāi)發(fā)板編譯OpenHarmony源碼后燒錄鏡像的教程,觸覺(jué)智能Purple Pi OH鴻蒙開(kāi)發(fā)板演示。搭載了瑞芯微RK3566四核處理器,樹(shù)莓派卡片電腦設(shè)計(jì),支持開(kāi)
    的頭像 發(fā)表于 12-30 10:08 ?777次閱讀
    <b class='flag-5'>OpenHarmony</b>源碼編譯后燒錄鏡像教程,RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開(kāi)發(fā)板</b>演示

    【北京迅為】itop-3568 開(kāi)發(fā)板openharmony鴻蒙燒寫(xiě)及測(cè)試-第1章 體驗(yàn)OpenHarmony—燒寫(xiě)鏡像

    【北京迅為】itop-3568 開(kāi)發(fā)板openharmony鴻蒙燒寫(xiě)及測(cè)試-第1章 體驗(yàn)OpenHarmony—燒寫(xiě)鏡像
    的頭像 發(fā)表于 03-04 16:31 ?521次閱讀
    【北京迅為】itop-3568 <b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>openharmony</b><b class='flag-5'>鴻蒙</b>燒寫(xiě)及測(cè)試-第1章 體驗(yàn)<b class='flag-5'>OpenHarmony</b>—燒寫(xiě)鏡像

    【北京迅為】iTOP-RK3568開(kāi)發(fā)板鴻蒙OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開(kāi)發(fā)實(shí)操-HDF驅(qū)動(dòng)配置UART

    【北京迅為】iTOP-RK3568開(kāi)發(fā)板鴻蒙OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開(kāi)發(fā)實(shí)操-HDF驅(qū)動(dòng)配置UART
    的頭像 發(fā)表于 03-25 11:02 ?666次閱讀
    【北京迅為】iTOP-RK3568<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b>系統(tǒng)南向驅(qū)動(dòng)<b class='flag-5'>開(kāi)發(fā)</b>實(shí)操-HDF驅(qū)動(dòng)<b class='flag-5'>配置</b>UART

    鴻蒙北向開(kāi)發(fā)OpenHarmony5.0 DevEco Studio開(kāi)發(fā)工具安裝與配置

    本文介紹OpenHarmony5.0 DevEco Studio開(kāi)發(fā)工具安裝與配置鴻蒙北向開(kāi)發(fā)入門(mén)必備!由觸覺(jué)智能Purple Pi OH
    的頭像 發(fā)表于 03-28 18:05 ?758次閱讀
    <b class='flag-5'>鴻蒙</b>北向<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>OpenHarmony</b>5.0 DevEco Studio<b class='flag-5'>開(kāi)發(fā)</b>工具安裝與<b class='flag-5'>配置</b>

    貝啟BQ3568HM 開(kāi)發(fā)板被選用為 OpenHarmony 明星開(kāi)發(fā)板

    經(jīng)開(kāi)放原子開(kāi)源基金會(huì)OpenHarmony社區(qū)官方測(cè)評(píng)評(píng)選,貝啟科技BQ3568HM開(kāi)源鴻蒙開(kāi)發(fā)板被正式選用為OpenHarmony明星開(kāi)發(fā)板
    的頭像 發(fā)表于 05-25 00:22 ?499次閱讀
    貝啟BQ3568HM <b class='flag-5'>開(kāi)發(fā)板</b>被選用為 <b class='flag-5'>OpenHarmony</b> 明星<b class='flag-5'>開(kāi)發(fā)板</b>