1. 程式人生 > >Intel Galileo筆記(六)Linux Yocto的研究

Intel Galileo筆記(六)Linux Yocto的研究

一,前言

如果之前編譯成功也就不會有這篇文章,正是因為失敗了,所以我不得不研究yocto安裝的原理。 當然在準備之前 你得下載幾個包和必要的軟體,這裡不多說,給個地址: 這個是網上大多數資料所沒有的,因為這個是最新版本 1.0.1的。

二,編譯過程

編譯過程是非常的艱辛,我遇到了非常多的問題,數不勝數,遍了幾天都沒有過,首先我得介紹一下yocto的原理

1. ./setup.sh

如果intel的編譯指南里面的第一步就是執行meta-clanton-* 裡面的setup.sh,setup.sh主要程式碼如下:
<pre name="code" class="python">main() {
  my_dir=$(dirname $(readlink -f $0))
  metaintel_dir=$my_dir/meta-intel
  poky_dir=$my_dir/poky
  metaoe_dir=$my_dir/meta-oe/meta-oe
  yocto_conf_dir=$my_dir/yocto_build/conf

  parse_opts "
[email protected]
" do_git poky do_git meta-intel do_git meta-oe mkdir -p $yocto_conf_dir do_bblayers_conf do_local_conf do_patchheartbleed }

那主要是幹嘛呢,其實就是那三句git,它從yoctoproject上git下來三個分支,具體的地址是可以在setup資料夾內看到的,所以,這裡會出現一個錯誤就是,git會卡住不動,其 中的原因很簡單,這時候git是需要配置一下代理的,我這一步因為是虛擬機器,在宿主系統裡直接打開了vpn。 還有一個錯誤就是在這一步不會體現,在bitbake時候會莫名其妙體現的就是:路徑得短,我吃了好些苦頭在這裡,最主要的表現是在do_patch的 時候出錯,地址明明沒問題,就是無法下載,所以我推薦把meta-clanton放在/tmp下

2.source

由於source沒有出錯,我沒詳細的去看,但是source的原理也很簡單,就是把環境變數設定為目標系統上的變數,這樣之後才可以進行編譯。之後編譯出的一切東西都在 yocot_build 資料夾內,這個資料夾可以理解為是未來目標系統的

3.patch

沒錯,這個包我是偶然在官網上發現的,並且在編譯指南里面並沒有提到,才知道1.0.1編譯前還要patch,先給出patch的包: patches 裡面有一份說明,大家照著做就好了,我就大致介紹一下 它有是個補丁分別為: 1.x264 2.UART 3.USB 4.OpenSSL 具體補了那些我也沒看,當然如果仔細看了包裡面的patch.txt 你會發現 你要記住設定一個環節變數 $WORKSPACE
export WORKSPACE=/tmp/.....

4.bitbake

1.yocto介紹

bitbake到底是什麼玩意的呢,乍一看摸不著頭腦,但是細細研究一下下就明白了,我下面就把編譯的過程慢慢解釋一下yocto是如何建立的(當然,大多數的交叉編譯都是這麼建立的):

1.基本的工具鏈

這裡主要是一些gcc zlib這些基礎的工具,主要作用是為了編譯核心和之後的核心用的gcc做準備,這是最關鍵的一步。

2.核心編譯和系統用的工具

之前步驟叫第一遍工具鏈編譯,當核心編譯好後,就是第二遍工具鏈,這次編譯出的工具是目標系統的基礎,就是為了今後系統內新增工具做準備,當然這一步也把核心編出來 了,但是似乎yocto是字編譯了一邊gcc好像,具體原因不想細究了嘿嘿,當然也有可能是兩邊天知道呢。

3.bitbake出場

bitbake最大的好處是什麼?就是自動化,因為編譯好核心後,這時候系統雖然可以執行,但是之後有茫茫多的軟體,你雖然可以一個個config  make install,當顯然可以建立 一個小系統但是,實在太麻煩。這時候bitbake這個py檔案,會自動配置好每個包,下載每個包,每個包具體的配置你可以在poky等幾個問價內看到的,主要是bb檔案,bb檔案 被稱為配方,裡面有詳詳細的配置,比如說url地址等等。說了這麼多,感覺很明白,但是實際編譯的時候還是充滿了錯誤,我下面來列舉一下我遇到的問題:
1.網路問題
1)這個問題非常奇葩,碰到的情況基本上就是包的下載地址出現了錯誤,這時候你就要修改包的地址了,我一般推薦如下:我以opencv舉例子,可以看到bb檔案所在地方有個資料夾名為opencv:
這時候首先把下載下來的包放到opencv資料夾下,然後修改 opencv_2.4.3.bb檔案, 將SRC_URI 後面的url地址 改為 file://....檔案,這樣你就可以從本地使用這個包了, 2)當然我後來想到一個辦法,應該是可以的,但是沒有試過,你可以將包直接放到 yocto_build/downloads 目錄下,之後就會提示一個waring 就沒然後了。
2.編譯問題
這是非常頭疼的,我不清楚有多少問題,有時候包了對了,但是就是提示在 do_config do_compile 的時候出錯,我認為這個問題主要原因是編譯這個包的時候可能缺少別的依 賴包,造成了配置與編譯失敗。雖然bitbake 是可以檢查依賴關係的。 值得一提的是,我後來又編譯了一邊,發現這當中是竟然意外的沒有出現這類的問題。這點值得探討。
3.python程式碼出錯
偶爾編譯會出現一些python程式碼出錯,溢位啊什麼,包括記憶體出錯,這類問題我的解決方法是等到結束後,重新輸入bitbake命令就可以了。

三,編譯配置

這裡就介紹兩個:

1.yocto的整體配置

其實在source 命令後,你可以選擇不去bibake 而是使用bitbake的圖形介面hob,會如下:
你只要照著選項 一步步走就可以自動編譯了,你會看到你有了選擇裝什麼軟體不裝什麼軟體的權力了!

2.核心的配置

我查了許多的資料,都給出了簡單的一句 加入 -c menuconfig 就可以配置核心了,這是什麼意思?難道如下命令就可以麼?
bitbake image-full-galileo -c menuconfig

你會發現報錯了,提示沒有這個命令,我一開始百思不得其解,後來才想到bitbake。 你完全可以這麼輸入一個命令
bitbake gcc

這句話什麼意思?就是給目標系統裝一個gcc,那麼同樣的:
bitbake linux-yocto-clanton -c menuconfig

這句話的意思是,給目標系統裝一個 linux-yocto-clanton (其實就是核心,核心安裝就像裝普通包一樣,還不錯吧),那麼-c menuconfig 就是我要執行一個指令叫menuconfig 所以可以看出不僅僅是核心別的軟體都是可以配置的,只是配置命令不同吧了。

四,尾聲

我將的東西不是很專業也不是很有道理可能,希望大家能夠看一下yocotproject 官網,裡面有非常詳盡的說明,我是打算研究一下的,但是可能之後就暫時擱置一下,急功近利 的去研究一下linux下程式設計了。

相關推薦

Intel Galileo筆記Linux Yocto研究

一,前言 如果之前編譯成功也就不會有這篇文章,正是因為失敗了,所以我不得不研究yocto安裝的原理。 當然在準備之前 你得下載幾個包和必要的軟體,這裡不多說,給個地址: 這個是網上大多數資料所沒有的,因為這個是最新版本 1.0.1的。 二,編譯過程 編譯過程是非常的

作業系統實驗筆記-linux下共享儲存區通訊

目錄前期基礎知識客戶端向伺服器端共享儲存區子程序之間共享儲存區前期基礎知識    本次實驗其實重點的是這麼幾個變數:addr、shmid 以及幾個重要的函式:shmet、shmat、shmget、shmctl對於系統V共享記憶體,主要有以下幾個API:shmget()、shm

Linux入門實踐筆記——壓力測試工具Apache Bench的安裝、使用和結果解讀

內容   本文介紹了壓力測試工具Apache Bench在Centos系統中的安裝,常用的測試指令,以及測試結果的解讀。 版本 ​  作業系統: CentOS 7.2 64位   Apache Bench:2.3 說明   轉載請說明出處:Linux入門實踐筆記(六)——壓力測試工具Apache

Linux學習筆記-Linux常用命令-網路通訊與關機重啟

(六)Linux學習筆記-Linux常用命令-網路通訊與關機重啟 網路通訊 write(給另外一個使用者發信息) wall(向所有使用者廣播資訊) ping(測試網路連通性) ifconfig(檢視網路設定) 關機重

linux筆記------程序與服務

#######系統程序及服務的控制####### ##1.什麼是程序## 程序就是系統未完成並且正在進行的工作 ##2.檢視程序## (1)圖形方式檢視 gnome-system-monitor (2)程序檢視命令 ps -A ##所有程序 -a

Linux學習筆記

遠端管理常用命令 1.檢視和配置網絡卡資訊 序號 命令 對應英文 作用 01 ifconfig configure a network interface 檢視/配置計算

MySQL學習筆記—— MySQL自連接

概念 cor 子查詢 ron 表操作 例子 質量 _id order by 有的時候我們需要對同一表中的數據進行多次檢索,這個時候我們可以使用之前學習過的子查詢,先查詢出需要的數據,再進行一次檢索。 例如:一張products表,有產品id,供應商id(vend_

學習筆記

tde 監聽 文本 ren 頁面 define www 顯示 back BUG集錦:1. storage on 事件監聽必須兩個頁面同時打開,且處於服務器訪問狀態2. submit 和 button 不能套在 a 裏面,否則 submit 事件將消失3. 新建 Object

機器學習筆記邏輯回歸

邏輯回歸 alt 表示 結果 不變 改變 最小值 nbsp 可能性 一、邏輯回歸問題 二分類的問題為是否的問題,由算出的分數值,經過sign函數輸出的是(+1,-1),想要輸出的結果為一個幾率值,則需要改變函數模型 ,其中,, 則邏輯回歸的函數為 二、邏輯回歸錯誤評價 線性

IDEA使用筆記——設置項目的JDK配置

shift pro (六) ima 發現 打開 cnblogs ctr alt+ 1:由於dev分支和master分支的代碼差異比較多,所以,就從master上分出一個新的分支dev_,於是我就克隆新的代碼,打開對應的項目文件,然後啟動試試,發現報出如下的錯誤,很明顯是因為

jquery學習筆記插件的編寫

function jquery 命名方式 一、對jQuery對象的擴展;(function($){ $.fn.extend( { fun1:abc,fun2:1bc … } )})(jQuery)二、對jQuery本身的擴展,相當於靜態方法;(function($){ $

Python學習筆記map/reduce

code image 但是 oat tools col .com 參數 map() 摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143178

Unity3D之Mecanim動畫系統學習筆記:使用腳本控制動畫

ont nim 復制代碼 info rip esc enter machine images 控制人物動畫播放 這裏我重新弄了一個簡單的場景和新的Animator Controller來作為示例。 下面先看看Animator Controller的配置: 人物在站

如鵬網學習筆記ADO.Net基礎

direct 問題 .... 數據庫連接 sta adapter query 寫到 數據類型 ADO.Net基礎 一、ADO.Net簡介   1,程序要通過SQL語句自動化的操作數據庫,必須要用一個類庫,     類庫要提供execute("insert into ...

SpringMVC筆記SpringMVC的轉發和重定向

配置文件 turn 返回 請求 字符串類型 情況 spring 讓我 ota 一、轉發和重定向 一般情況下,控制器方法返回字符串類型的值會被當成邏輯視圖名處理 如果返回的字符串中帶 forward: 或 redirect: 前綴 時,SpringMVC 會對他們進行特殊處理

.net core 2.0學習筆記:Remoting核心類庫RealProxy遷移

ride dispatch 包含 void reflect 既然 splay creat (六) 在學習.net core的過程中,我們已經明確被告知,Remoting將不會被支持。官方的解釋是,.net framework 類型包含了太多的Runtime的內容,是

Python學習筆記

範圍 規則 代碼 遞歸 none lsit 允許 urn 簡介 一、函數簡介   函數可以看做是程序的組織的一種方式,是功能代碼塊的一種抽象和封裝 二、函數定義   def 函數名():    功能代碼語句    return   函數在遇到return會終止整個函數,如

Linux用戶管理Linux磁盤管理

linux磁盤管理Linux磁盤管理一.硬盤分區1.外部存儲器的表示方法(1)硬盤l IDE /dev/hdxyl SCSI/USB /dev/sdxy(2)軟盤(/dev/fdx)(3)CD-ROM(/dev/cdrom)2.fdisk分區工具的使用(1) fdisk的啟動方法#fdi

java學習筆記:變量類型

animal 單獨使用 div 位置 fin strong pub 局部變量 變量聲明 java一共三種變量: 局部變量(本地變量):方法調用時創建,方法結束時銷毀 實例變量(全局變量):類創建時創建,類銷毀時銷毀 類變量(靜態變量):程序啟動是創建,程序銷毀時銷毀

Linux系列教程——Linux文件搜索命令

www. 講解 -i linux鏈接 /tmp 任務 html 幫助文檔 大於   前一篇博客我們講解了Linux鏈接命令和權限管理命令, 通過 ln -s 鏈接名 表示創建軟鏈接,不加-s表示創建硬鏈接;還有三個更改權限的命令,chmod命令可以更改文件或目錄權限,ch