操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    Yocto 項目在嵌入式 Linux 的世界非常著名,這是因為它用起來非常靈活、方便。Yocto 的目標是為嵌入式軟硬件開發商創建自己的 Linux 發行版。 -- Ahmad

    本文導航
    • -開發機的基本條件 …… 05%

    • -Yocto 編譯構建過程 …… 50%

    編譯自: https://www.howtoforge.com/tutorial/how-to-create-your-own-linux-distribution-with-yocto-on-ubuntu/

    作者: Ahmad

    譯者: oska874

    本文主要聚焦在如何使用 Yocto 在 Ubuntu 上創建一個最小化的 Linux 發行版。Yocto 項目在嵌入式 Linux 的世界非常著名,這是因為它用起來非常靈活、方便。Yocto 的目標是為嵌入式軟硬件開發商創建自己的 Linux 發行版。本文我們將會創建一個可以運行在 QEMU 上的最小化的 Linux,并且在 QEMU 上實際運行。

    開發機的基本條件

    • 最少 4-6 GB 內存

    • 最新版的 Ubuntu 系統(本文使用了 16.04 LTS)

    • 磁盤剩余空間至少 60-80 GB

    • 在創建 Linux 發行版之前先安裝下面的軟件包

    • 下載最新的 Yocto(Poky 是其最小開發環境)穩定分支

    apt-get update
    apt-get install wget git-core unzip make gcc g++ build-essential subversion sed autoconf automake texi2html texinfo coreutils diffstat python-pysqlite2 docbook-utils libsdl1.2-dev libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev xsltproc desktop-file-utils chrpath groff libtool xterm gawk fop

    Install prerequisites for Yocto

    如下所示,開發環境要安裝的軟件包將近 1GB 大小。

    Install the development packages

    在這個教程中,系統上克隆的是 poky 的 morty 穩定分支。

    git clone -b morty git://git.yoctoproject.org/poky.git

    install poky

    進入 poky 目錄,然后運行下面的命令為 Yocto 開發環境設置(設置/導出)一些環境變量。

    source oe-init-build-env

    如下所示,在運行了 open embedded (oe) 的構建環境腳本之后,終端里的路徑會自動切換到 build 目錄,以便進行之后行發行版的的配置和構建。

    Prepare OE build environment

    上面的截屏展示了在 conf 目錄下創建的文件 local.conf。這是 Yocto 用來設置目標機器細節和 SDK 的目標架構的配置文件。

    如下所示,這里設置的目標機器是 qemux86-64。

    Set the target machine type

    如下面截圖所示,在 local.conf 中取消下面參數的注釋符號。

    DL_DIR ?="${TOPDIR}/downloads"

    Configure local.conf file

    SSTATE_DIR ?="${TOPDIR}/sstate-cache"

    Set SSTATE_DIR

    TMPDIR ?="${TOPDIR}/tmp"

    Set TMPDIR

    PACKAGE_CLASSES ?="package_rpm"

    SDKMACHINE ?="i686"

    Set PACKAGE_CLASSES and SDKMACHINE

    如下所示,在 local.conf 中為基于 Yocto 的 Linux 設置空密碼和后續的一些參數。否則的話用戶就不能登錄進新的發行版。

    EXTRA_IMAGE_FEATURES ?="debug-tweaks"

    Set debug-tweaks option

    我們并不準備使用任何圖形化工具來創建 Linux OS,比如 toaster (hob 已經不再支持了)。

    Yocto 編譯構建過程

    現在運行下面的 bitbake 工具命令開始為選定的目標機器下載和編譯軟件包。

    bitbake core-image-minimal

    Start bitbake

    非常重要的是要在普通 Linux 用戶下運行上面的命令,而不是使用 root 用戶。如下面截圖所示,當你在 root 用戶下運行 bitbake 命令會產生下面所示的錯誤。

    Do not run bitbake as root

    再一次運行導出環境變量的腳本(oe-init-build-env),重新執行相同的命令來啟動下載和編譯過程。

    rerun commands

    如下所示,構建腳本組件的第一步工作是解析配置(recipe)。

    Parse the build recipes

    下面的截圖展示了構建腳本的解析過程。同時也顯示了用來構建你的新的基于 yocto 的發行版的構建系統的細節。

    Building proceeds

    在下載了 SDK 和必要的庫之后,下一步工作是下載并編譯軟件包。如下截圖展示了為構建新發行版而執行的任務。這一步將會執行 2-3 小時,因為首先要下載需要的軟件包,然后還要為新的 Linux 發行版編譯這些軟件包。

    Compilation will take several hours

    下面的截圖表明了任務列表執行完畢。

    Compilation

    為目標機器類型 qemux86-64 編譯好的新鏡像位于 build/tmp/deploy/images/qemux86-64:

    Build complete

    如下所示,上面的命令如果運行在 Putty 上會產生一個錯誤。

    command error in putty

    通過 rdp 在 Ubuntu 平臺上再次運行上面的命令。

    Command works fine in rdp

    為運行新的基于 Yocto 的 Linux 發行版的 qemu 打開一個新屏幕。

    Open Quemu emulator

    下面展示了新發行版的登錄界面,同時也顯示了使用的 yocto 項目的版本號。默認的用戶名是 root ,密碼為空。

    Linux distribution started

    最后使用 root 用戶名和空密碼登錄新發行版。如下截圖所示,在這個最小版本的 Linux 上運行了基本的命令(data 、 ifconfig 和 uname)。

    Test the Linux distribution

    本文的目標是理解使用 Yocto 創建新的 Linux 發行版的過程。


    via: https://www.howtoforge.com/tutorial/how-to-create-your-own-linux-distribution-with-yocto-on-ubuntu/

    作者:Ahmad[1] 譯者:Ezio 校對:wxy

    本文由 LCTT[2] 原創編譯,Linux中國 榮譽推出

    • [1]: Ahmad - https://www.howtoforge.com/tutorial/how-to-create-your-own-linux-distribution-with-yocto-on-ubuntu/

    • [2]: LCTT - https://github.com/LCTT/TranslateProject


    導入TouchAction

    • Python 版本
    from appium.webdriver.common.touch_action import TouchAction
    
    
    • Java 版本
    import io.appium.java_client.TouchAction;
    
    

    常用的手勢操作

    press 按下

    TouchAction 提供的常用的手勢操作有如下操作:

    • press 按下
    • release 釋放
    • move_to/moveTo 移動
    • tap 點擊
    • long_press/longPress 長按
    • wait 等待
    • cancel 取消
    • perform 執行

    TouchAction 提供的 press( ) 方法可以實現對元素或者坐標的按下操作。通常會結合 release( ) 方法實現對某個元素的點擊(包括按下和抬起兩個動作)。

    在某個控件上執行 press 操作,用法如下:

    • Python 版本

    按下某個元素,用法如下:

    press(WebElement el)
    
    

    在坐標為(x,y)的點執行 press 操作,用法如下:

    press(int x, int y)
    
    
    • Java 版本

    在坐標為(x,y)的點執行 press 操作,用法如下:

    press(int x, int y)
    
    

    release 釋放

    釋放操作,可以結合其它的事件使用。代表該系列動作的一個結束標志。在某個控件上執行釋放操作,用法如下:

    • Python 版本
    release(WebElement el)
    
    

    也可以在上一個操作結束之后執行 release,不添加任何參數,用法如下:

    release()
    
    
    • Java 版本
    release()
    
    

    移動

    以控件為目標,從一個點移動到該目標上,用法如下:

    • Python 版本
    move_to(WebElement el)
    
    

    以(x,y)點為目標,從一個點移動到該目標,用法如下:

    move_to(WebElement el, int x, int y)
    
    
    • Java 版本

    以(x,y)點為目標,從一個點移動到該目標,用法如下:

    moveTo(WebElement el, int x, int y)
    
    

    tap 點擊

    在某個控件的中心點上點擊一下,用法如下:

    • Python 版本
    tap(WebElement el)
    
    

    以控件 el 的左上角為基準,沿著 x 軸向右移動 x 單位,沿著 y 軸向下移動 y 單位。在該電腦上點擊,用法如下:

    tap(WebElement el, int x, int y)
    
    

    以(x,y)坐標點為目標點擊,用法如下:

    tap(int x, int y)
    
    
    • Java版本

    只提供坐標點擊,用法如下:

    tap(int x, int y)
    
    

    長按

    長按某一控件,用法如下:

    • Python 版本
    long_press(WebElement el)
    
    

    以(x,y)點為目標實現長按,用法如下:

    long_press(int x, int y)
    
    

    在控件的左上角的 x 坐標偏移 x 單位,y 左邊偏移 y 單位的坐標上長按。用法如下:

    long_press(WebElement el, int x, int y)
    
    
    • Java 版本

    只提供坐標點擊,用法如下:

    longPress(int x, int y)
    
    

    等待

    等待,單位為秒。可以在操作事件的過程中,短暫地停留幾秒再繼續操作。用法如下:

    • Python 版本
    wait(long timeout)
    
    
    • Java 版本
    wait(long timeout)
    
    

    cancel 取消

    可以取消執行事件鏈中的事件,用法如下:

    • Python 版本
    cancel()
    
    
    • Java 版本
    cancel()
    
    

    執行 perform

    執行事件鏈中的事件,一般最后會調用這個方法,順序執行事件鏈中的動作。用法如下:

    • Python 版本
    perform()
    
    
    • Java 版本
    perform()
    
    

    案例

    打開測試應用,從元素 “Views” 文本滑動到 “Accessibility” 元素,創建一個測試文件代碼如下:

    測試 app 官方下載地址:appium/sample-code/apps at master · appium/appium · GitHub

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # 測試文件 test_touchaction.py
    from appium import webdriver
    from appium.webdriver.common.touch_action import TouchAction
    
    class TestTouchAction():
        def setup(self):
            caps={}
            caps['platformName']='Android'
            caps['platformVersion']='6.0'
            caps['deviceName']='emulator-5554'
            caps['appPackage']='io.appium.android.apis'
            caps['appActivity']='io.appium.android.apis.ApiDemos'
            self.driver=webdriver.Remote(\
            "http://127.0.0.1:4723/wd/hub", caps)
            self.driver.implicitly_wait(5)
    
        def teardown(self):
            self.driver.quit()
    
        def test_touchaction_unlock(self):
            # 點擊 Views
            el1=self.driver.find_element_by_accessibility_id(
                "Views")
            # 點擊 Accessibility
            el2=self.driver.find_element_by_accessibility_id(
                "Accessibility")
            # TouchAction 滑動操作
            action=TouchAction(self.driver)
            action.press(el1).wait(100).move_to\
            (el2).wait(100).release().perform()
    
    
    public class TouchActionTest {
        static AppiumDriver driver;
    
        @BeforeAll
        public static void beforeAll() throws MalformedURLException {
            DesiredCapabilities caps=new DesiredCapabilities();
            caps.setCapability("deviceName", "emulator-5554");
            caps.setCapability("platformName", "Android");
            caps.setCapability("appPackage", "io.appium.android.apis");
            caps.setCapability("appActivity", "io.appium.android.apis.\
            ApiDemos");
            URL appiumServer=new URL("http://127.0.0.1:4723/wd/hub");
            driver=new AndroidDriver(appiumServer, caps);
            driver.manage().timeouts().implicitlyWait(10, \
            TimeUnit.SECONDS);
        }
    
        @Test
        void test() {
            // 創建 TouchAction 對象
            TouchAction action=new TouchAction<>(driver);
            // TouchAction 滑動操作
            action.press(PointOption.point((int) (width * 0.5), \
            (int) (height * 0.8))).waitAction(WaitOptions.\
            waitOptions(Duration.ofSeconds(2))).moveTo(\
            PointOption.point((int) (width * 0.5), \
            (int) (height * 0.2))).release().perform();
        }
    
    }
    
    

    以上兩段代碼實現了相同的操作,創建了一個 TouchAction 對象,調用里面的 press() 方法實現起點元素的點擊,使用 wait() 方法在事件之間添加等待,使用 move_to()/moveTo() 方法是完成手勢的移動操作,然后調用 release() 方法來完成手勢的抬起,最后調用 perform() 方法對添加到 TouchAction 中的事件鏈順序執行。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

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

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