yocto的xxx.bb文件在什么時候會拷貝文件到build目錄

在 Yocto 中,.bb?文件用于描述如何構建和安裝一個軟件包,而文件在構建過程中的拷貝操作通常會在某些特定的步驟中進行。具體來說,文件會在以下幾個階段被拷貝到?build?目錄(或者更準確地說,拷貝到目標目錄?${D},這是 BitBake 過程中的一個工作目錄,通常與?build?目錄相對應):

1.?下載階段(Fetch Phase)

在構建開始時,Yocto 會從源代碼管理系統(例如 Git)或者 URL 下載源代碼,或者將本地文件拷貝到構建目錄。這個階段發生在?do_fetch?步驟,具體步驟包括:

  • 如果你的?SRC_URI?是從 Git 倉庫拉取代碼,Yocto 會在?do_fetch?階段拉取代碼。
  • 如果你的?SRC_URI?是指向一個本地的壓縮包或文件,Yocto 會將這個文件拷貝到?${WORKDIR}

在這個階段,文件并不會被拷貝到目標目錄(即最終的安裝路徑),它們只是拷貝到?${WORKDIR},即構建工作目錄。${WORKDIR}?是 Yocto 中源代碼和中間文件的存放位置。

2.?解壓和準備階段(Extract Phase)

在?do_fetch?后,Yocto 會解壓文件(如果需要),并在?do_unpack?階段準備源代碼。這個步驟主要是對源代碼進行解包,并將文件放置到?${WORKDIR}?下的相應位置。

  • 如果源文件是一個壓縮包(如?.tar.gz),Yocto 會在這個階段解壓縮并存放在?${WORKDIR}?目錄中。

3.?構建階段(Build Phase)

在構建階段(如?do_compile),Yocto 會根據配方文件中的構建系統(比如 CMake、Makefile 等)進行實際的構建操作。此時的目標文件仍然存放在?${WORKDIR}?中。構建過程并不會將文件直接拷貝到最終的安裝目錄,而是生成中間構建產物(例如?.o.a.so?文件等)。

4.?安裝階段(Install Phase)

文件最終被拷貝到目標目錄(如?/usr/bin/usr/lib/etc)是在?do_install?階段。此時,源代碼中生成的二進制文件、配置文件和資源文件將被拷貝到構建目錄中的?${D}?目錄。

  • do_install()?是一個關鍵的階段,在這個階段你需要手動指定如何將構建產物安裝到?${D}?目錄。${D}?是目標文件系統的根目錄(通常是一個臨時目錄),它模擬了最終的文件系統結構。

    示例:

  • do_install() {install -d ${D}${bindir}install -m 0755 ${S}/myapp ${D}${bindir}/install -m 0644 ${S}/myapp.conf ${D}${sysconfdir}/
    }
    

在這個階段,Yocto 會將你在?do_install()?中指定的文件拷貝到?${D}?目錄。

5.?打包階段(Package Phase)

do_package?階段是在安裝后,Yocto 將文件打包成最終的二進制包(例如?.ipk.rpm?或?.deb),這些包將被部署到目標系統上。此時,Yocto 會將?${D}?中的文件(即你在?do_install()?階段拷貝的文件)打包成一個軟件包。

6.?其他階段(例如 do_rootfs)

在某些情況下,Yocto 會將最終的文件系統(根文件系統)打包并構建為鏡像(例如?ext4tar?格式等)。這是通過?do_rootfs?階段完成的。在這個階段,Yocto 會將已經安裝到?${D}?目錄中的所有文件合并并生成最終的文件系統鏡像。

重要目錄說明

  • ${WORKDIR}: 用于存放源代碼和中間構建文件,通常在?do_fetch?和?do_unpack?階段使用。
  • ${S}: 指定源代碼所在的位置,通常是?${WORKDIR}?下的源代碼目錄。
  • ${D}: 目標文件系統的安裝目錄,在?do_install()?階段使用。最終文件將被安裝到這個目錄中,之后將被打包到?.ipk.rpm?或?.deb?包中。
  • ${bindir}${libdir}${sysconfdir}: 這些是標準的文件系統路徑,用于指定二進制文件、庫文件和配置文件的安裝位置。例如:
    • ${bindir}:二進制可執行文件的安裝目錄(如?/usr/bin
    • ${libdir}:庫文件的安裝目錄(如?/usr/lib
    • ${sysconfdir}:配置文件的安裝目錄(如?/etc

示例?.bb?文件的安裝部分

下面是一個簡單的?do_install()?示例,展示了如何將文件從構建目錄拷貝到目標目錄:

do_install() {# 安裝二進制文件install -d ${D}${bindir}install -m 0755 ${S}/myapp ${D}${bindir}/# 安裝配置文件install -d ${D}${sysconfdir}/myappinstall -m 0644 ${S}/myapp.conf ${D}${sysconfdir}/myapp/# 安裝庫文件install -d ${D}${libdir}install -m 0755 ${S}/libmylib.so ${D}${libdir}/
}

總結

  • 文件拷貝到?build?目錄:主要發生在?do_install()?階段,文件會被從構建目錄(${WORKDIR})拷貝到目標目錄(${D}),然后生成安裝包。
  • 構建階段和安裝階段的區別:構建階段(如?do_compile)主要是生成中間文件,而安裝階段(如?do_install)是將這些生成的文件拷貝到模擬的目標文件系統目錄(${D})中。

在?.bb?文件中,do_install?階段是決定文件最終拷貝到哪里并打包的關鍵部分。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62174.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62174.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62174.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

主打極致性價比,AMD RX 8600/8800顯卡定了

*以下內容僅為網絡爆料及傳聞,一切以官方消息為準。 這誰能想到,率先掏出下一代桌面獨立顯卡的不是老大哥 NVIDIA,也不是 AMD,反而是三家中存在感最弱的 Intel! 就在 12 月 3 日,Intel 正式發布了自家第二…

數組哪些方法會觸發Vue監聽,哪些不會觸發監聽

發現寶藏 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。【寶藏入口】。 在 Vue 中,數組的變化是通過 響應式 系統來監聽的。Vue 使用 getter 和 setter 來追蹤數組的變化,并在數…

npm, yarn, pnpm之間的區別

前言 在現代化的開發中,一個人可能同時開發多個項目,安裝的項目越來越多,所隨之安裝的依賴包也越來越臃腫,而且有時候所安裝的速度也很慢,甚至會安裝失敗。 因此我們就需要去了解一下,我們的包管理器&#…

工業檢測基礎-工業相機選型及應用場景

以下是一些常見的工業檢測相機種類、檢測原理、應用場景及選型依據: 2D相機 檢測原理:基于二維圖像捕獲,通過分析圖像的明暗、紋理、顏色等信息來檢測物體的特征和缺陷.應用場景:廣泛應用于平面工件的外觀檢測,如檢測…

C語言連接數據庫

文章目錄 一、初始化數據庫二、創建數據庫連接三、執行增刪改查語句1、增刪改2、查 四、執行增刪改查語句 接下來我簡單的介紹一下怎么用C語言連接數據庫。 初始化數據庫創建數據庫連接執行增刪改查語句關閉數據庫連接 一、初始化數據庫 // 數據庫初始化 MYSQL mysql; MYSQL* r…

優化LabVIEW數據運算效率的方法

在LabVIEW中進行大量數據運算時,提升計算效率并減少時間占用是開發過程中常遇到的挑戰。為此,可以從多個角度著手優化,包括合理選擇數據結構與算法、并行處理、多線程技術、硬件加速、內存管理和界面優化等。通過采用這些策略,可以…

開源模型應用落地-安全合規篇-用戶輸入價值觀判斷(四)

一、前言 在深度合規功能中,對用戶輸入內容的價值觀判斷具有重要意義。這一功能不僅僅是對信息合法性和合規性的簡單審核,更是對信息背后隱含的倫理道德和社會責任的深刻洞察。通過對價值觀的判斷,系統能夠識別可能引發不當影響或沖突的內容,從而為用戶提供更安全、更和諧的…

計算機的錯誤計算(一百七十六)

摘要 利用某一大語言模型計算 的值,輸出為 0 . 例1. 在某一大語言模型下,計算 的值。其中sin中值取弧度。結果保留16位有效數字。 直接貼圖吧: 點評: (1)以上為一個大模型給的答案。從其回答可知&…

數據結構與算法——1204—遞歸分治法

1、斐波那契數列優化 使用滾動變量&#xff0c;保存當前計算結果和前兩項值 (1)RAB (2)更新計算對象&#xff0c;AB&#xff0c;BR #include<iostream> using namespace std;int fun(int n) {if (n 0)return 0;if (n 1 || n 2)return 1;int num11;int num21;int su…

openstack內部rpc消息通信源碼分析

我們知道openstack內部消息隊列基于AMQP協議&#xff0c;默認使用的rabbitmq 消息隊列。談到rabbitmq&#xff0c;大家或許并不陌生&#xff0c;但或許會對oslo message有些陌生。openstack內部并不是直接使用rabbitmq&#xff0c;而是使用了oslo.message 。oslo.message 后端的…

Python 3 和 MongoDB 的集成使用

Python 3 和 MongoDB 的集成使用 MongoDB 是一個流行的 NoSQL 數據庫&#xff0c;以其靈活的數據模型和強大的查詢功能而聞名。Python 3 作為一種廣泛使用的編程語言&#xff0c;與 MongoDB 的集成變得日益重要。本文將介紹如何在 Python 3 環境中集成和使用 MongoDB&#xff…

Postman自定義腳本Pre-request-script以及Test

這兩個都是我們進行自定義script腳本的地方&#xff0c;分別是在請求執行的前后運行。 我們舉兩個可能經常運用到的場景。 (一)請求A先執行&#xff0c;請求B使用請求A響應結果作為參數。如果我們不用自定義腳本&#xff0c;可能得先執行請求A&#xff0c;然后手動復制響應結果…

構建高效OTA旅游平臺的技術指南

1. 引言 在信息技術高速發展的今天&#xff0c;互聯網深刻地改變了人們的旅行方式。傳統的旅行社模式逐漸被在線旅游平臺所取代&#xff0c;OTA&#xff08;Online Travel Agency&#xff0c;在線旅行社&#xff09;旅游平臺應運而生&#xff0c;成為人們獲取旅游信息、預訂旅…

總結的一些MySql面試題

目錄 一&#xff1a;基礎篇 二&#xff1a;索引原理和SQL優化 三&#xff1a;事務原理 四&#xff1a;緩存策略 一&#xff1a;基礎篇 1&#xff1a;定義&#xff1a;按照數據結構來組織、存儲和管理數據的倉庫&#xff1b;是一個長期存儲在計算機內的、有組織的、可共享 的…

116. UE5 GAS RPG 實現擊殺掉落戰利品功能

這一篇&#xff0c;我們實現敵人被擊敗后&#xff0c;掉落戰利品的功能。首先&#xff0c;我們將創建一個新的結構體&#xff0c;用于定義掉落體的內容&#xff0c;方便我們設置掉落物。然后&#xff0c;我們實現敵人死亡時的掉落函數&#xff0c;并在藍圖里實現對應的邏輯&…

Excel技巧:如何批量調整excel表格中的圖片?

插入到excel表格中的圖片大小不一&#xff0c;如何做到每張圖片都完美的與單元格大小相同&#xff1f;并且能夠根據單元格來改變大小&#xff1f;今天分享&#xff0c;excel表格里的圖片如何批量調整大小。 方法如下&#xff1a; 點擊表格中的一個圖片&#xff0c;然后按住Ct…

智能合約

06-智能合約 0 啥是智能合約&#xff1f; 定義 智能合約&#xff0c;又稱加密合約&#xff0c;在一定條件下可直接控制數字貨幣或資產在各方之間轉移的一種計算機程序。 角色 區塊鏈網絡可視為一個分布式存儲服務&#xff0c;因為它存儲了所有交易和智能合約的狀態 智能合約還…

智慧油客:從初識、再識OceanBase,到全棧上線

今天&#xff0c;我們邀請了智慧油客的研發總監黃普友&#xff0c;為我們講述智慧油客與 OceanBase 初識、熟悉和結緣的故事。 智慧油客自2016年誕生以來&#xff0c;秉持新零售的思維&#xff0c;成功從過去二十年間以“以銷售產品為中心”的傳統思維模式&#xff0c;轉向“以…

【深度學習】手機SIM卡托缺陷檢測【附鏈接】

一、手機SIM卡托用途 SIM卡托是用于固定和保護SIM卡的部件&#xff0c;通過連接SIM卡與手機主板的方式&#xff0c;允許設備訪問移動網絡&#xff0c;用戶可以通過SIM卡進行通話、發送短信和使用數據服務。 二、手機SIM卡托不良影響 SIM卡接觸不良&#xff0c;造成信號中斷&…

高新技術企業復審需要哪些材料?

高新技術企業復審需要準備以下材料&#xff1a; 《高新技術企業認定復審申請書》&#xff1b;高新技術企業證書&#xff1b;企業營業執照副本、稅務登記證書&#xff08;復印件&#xff09;&#xff1b;企業職工人數、學歷結構以及研發人員占企業職工的比例證明&#xff1b;五…