2021年11月22日 星期一

Yocto Project 如何編譯出 ToolChain,如何使用 Toolchain編譯

 Yocto 目前已經是各大IC廠在使用的專案類型,與之相似的,有OpenWRT 或是 BuildRoot

今天要介紹如何從Yocto Project 編譯出ToolChain,並且會說明如何使用ToolChain,最後會說明如何編譯一個簡單的Hello World.

如何編譯出ToolChain
首先我們可以使用以下的Command來編譯出 ToolChain
bitbake meta-toolchain

編譯完成後,在 build/tmp/deploy/ 資料夾底下,會多出 sdk 資料夾,而裡面會有 ToolChain安裝檔,如下圖:








如何安裝ToolChain

把上面編譯出來的ToolChain安裝檔,執行並且加上參數 -h ,可以看到此安裝檔的使用說明,如下所示:

./oecore-x86_64-aarch64-toolchain-nodistro.0.sh -h
Usage: oecore-x86_64-aarch64-toolchain-nodistro.0.sh [-y] [-d <dir>]
  -y         Automatic yes to all prompts
  -d <dir>   Install the SDK to <dir>
======== Extensible SDK only options ============
  -n         Do not prepare the build system
  -p         Publish mode (implies -n)
======== Advanced DEBUGGING ONLY OPTIONS ========
  -S         Save relocation scripts
  -R         Do not relocate executables
  -D         use set -x to see what is going on
  -l         list files that will be extracted

如果沒有使用 "-d" 來指定安裝路徑,則系統預設會安裝在 /usr/local/oecore-x86_64/
簡單的安裝指令如下,會把ToolChain安裝在 /opt/ 路徑下:
./oecore-x86_64-aarch64-toolchain-nodistro.0.sh -d /opt/

可以看到 /opt/ 底下有一些檔案,有一些是環境變數設定檔,而ToolChain都在 sysroot資料夾底下

如何編譯可以放在開發版上的 HelloWorld 程式
假設剛剛我們把ToolChain安裝在 /opt/ 底下,我們可以先使用下面指令來設定一些環境變數
source /opt/environment-setup-aarch64-poky-linux

環境變數設定好之後,變數 $CC 會是預設的ToolChain執行檔,印出 $CC 這個變數,可以看到如下圖片:




接著先撰寫好簡單的helloWorld.c 小程式,用下面的Command編譯,就可以編譯出開發板可以Run的小程式
# 
$CC helloWorld.c -o hello


由這邊也可以發現,當要自己加入Package 到 Yocto Project,通常這個Package的 Makefile裡面,不能指定CC的值,不然編譯會出問題,關於這個議題,我再開一篇文章來講解如何加一個Package到 Yocto Project...

2021年9月27日 星期一

vi / vim 常用的搜尋方法

以下方式都是在command 模式,(按小寫i 就會切換到編輯模式,在按一次ESC會切到command模式)

1. 將游標移到字串上,直接按"*" ,可以直接做向下搜尋

2. 輸入"/", 接著輸入字串,可以向下搜尋此字串,接著按"n",可以向下搜尋,按"N",可以向上搜尋

3. 按下"?", 接著輸入字串,可以向上搜尋字串,接著按"n",可以向上搜尋,按"N",可以向下搜尋

4. 按下":",輸入"set num",可以列出整篇文字檔的"行號" 

2021年9月23日 星期四

insert BT module hci_uart.ko 的時候,遇到 Unknown symbol in module 的 Error 訊息

 今天在開發platform的時候,準備要把編譯好的 NXP BT module 做insert的動作,卻出現了如下面所列的錯誤訊息:

insmod: ERROR: could not insert module hci_uart.ko: Unknown symbol in module
[   79.719642] .(1)[5227:insmod]hci_uart: Unknown symbol hci_free_dev (err -2)
[   79.719810] .(1)[5227:insmod]hci_uart: Unknown symbol hci_alloc_dev (err -2)
[   79.719875] .(1)[5227:insmod]hci_uart: Unknown symbol hci_unregister_dev (err -2)
[   79.719889] .(1)[5227:insmod]hci_uart: Unknown symbol hci_recv_frame (err -2)
[   79.719927] .(1)[5227:insmod]hci_uart: Unknown symbol hci_register_dev (err -2)

以下我們將一步步來說明,如何找出這個問題的原因

1. 首先我們先到linux kernel driver底下,我們使用grep 來找一下,到底哪裡實作了 hci_free_dev()
# grep -rn hci_free_dev
結果找到的都是呼叫此function的地方,於是我們再往上一層路徑去尋找














2. 我們在kernel底下,再次輸入grep 指令來尋找看看哪裡實作了 hci_free_dev()
# grep -rn hci_free_dev
結果發現,此function實作在 net/bluetooth/hci_core.c 當中









3. 因為是Unkown Symbol錯誤,其原因可能是 kernel config 沒有開到需要的功能,導致找不到function實作的地方。
所以我們可以切換到 net資料夾底下,查看Makefile檔案,看看 bluetooth/hci_core.c 要開啟那些 config才會被編譯到。於是,我們發現,CONFIG_BT必須在Kernel Config當中被開啟才行













4. 接著準備去開啟kernel的config檔案。依據每個專案不同,位置與檔案名稱不一定相同,一般原生linux會是在 kernel/linux/v4.19/.config,我們編輯.config來查看CONFIG_BT的設定。
我們發現這邊設定為m,表示module的意思,Linux在開機過程,不會自動insert此 module,除非自己手動 insmod。因此我們把 "CONFIG_BT=m" 改為 "CONFIG_BT=y",然後重新編譯。
*如果找不到 CONFIG_BT,則必須自己加入字串CONFIG_BT=y,來做設定










5. 在重新編譯過後,再去insert hci_uart.ko,就沒有再報錯誤,問題就解決了!

2021年9月14日 星期二

git 打 patch的方法

 假設我現在的Source code有git資訊,也就是可以用 "git status" 或是 "git diff" 等指令來查看目前狀態或是差異

 假設我目前修改了檔案,路徑與檔名為
  /home/danny/src/example/aaa.c
 當前所在目錄為 /home/danny/ 底下

打一個patch(讓別人Merge你的修改) 
於是我們可以很簡單的,使用下面的命令,先打一個patch檔案
 git diff src/example/aaa.c > aaa.c.patch
於是就會多出一個檔案,位於 /home/danny/aaa.c.patch

 aaa.c.patch大概內容會如下,可以看到差異:

--- a/src/example/aaa.c
+++ b/src/example/aaa.c
@@ -33,7 +33,11 @@
-      printf("Hello\n");
+     printf("Hello World\n");

如何把patch檔Merge入自己的code
假設我現在是在 /home/andy/ 目錄下,先把 aaa.c.patch 複製到此目錄底下
接著確定此檔案確實存在 src/example/aaa.c
使用以下指令把patch檔打入
  patch -p1 < aaa.c.patch

這樣就可以了!!

2021年8月23日 星期一

編譯遇到 error: braces around scalar initializer [-Werror] 的解決方法

首先 braces 中文意思為 "大括號",

而編譯出現這個錯誤訊息時,十之八九問題出在少了對稱的大括號,

因此請仔細檢查一下,是否漏了"{" 或是加錯地方.

2021年8月20日 星期五

當要 export GPIO, 或是使用 gpio_request 遇到 write error: Device or resource busy 的解決方法

 當使用  echo 0 > /sys/class/gpio/export
kernel卻拋出 -sh: echo: write error: Device or resource busy

這表示此GPIO正被某個driver占用,因此你沒辦法申請這個GPIO來使用
而這個問題的解決方法,只能找出是哪個driver code, 做完 gpio_request()之後 卻沒有做 gpio_free()的地方

另外可以使用下面指令來查看那些gpio被占用

cat /sys/kernel/debug/gpio

=======================================================

另外下面記錄一些gpio操作的指令

第一步可以先ls /sys/class/gpio,有的可以從這邊看到gpio的base值 

(例如base=268, gpio0在下面的操作就要echo 268+0, gpio10就會是 268+10)

1. request gpio
echo 0 > /sys/class/gpio/export

2. check dicrection value
cat /sys/class/gpio/gpio0/direction

3. change direction
echo out > /sys/class/gpio/gpio0/direction

4. check output value
cat /sys/class/gpio/gpio0/value

5. change output value to high
echo 1 > /sys/class/gpio/gpio0/value

6. free the gpio
echo 0 > /sys/class/gpio/unexport




Linux Terminal 顯示亂碼

 如果再Linux teminal底下,遇到顯示亂碼的問題,可以用下面的指令解決

$ export LANG=zh_CN.UTF-8 

2021年6月30日 星期三

用Paypal購買Switch(NS)遊戲,設定使用信用卡匯率

前一篇文章有提過,跨區買eShop Switch 數位版遊戲,如果區域是俄羅斯聯邦,會有信用卡刷不過的問題,這時候就必須透過Paypal來付款 

而Paypal綁定信用卡,會有兩種匯率可以選擇,預設會是使用Paypal的匯率,但這樣換算下來,會被收比較多的錢(Paypal收一次,信用卡收一次?),因此我們通常會設定成使用信用卡匯率,下面就一步一步以圖片來告知怎麼設定


Step1:
先登入Paypal官網 https://www.paypal.com/tw/home 登入後,如下頁面,接著點選左上角選單:













Step2:
接著點選齒輪圖案:





















Step3:
點選上面的"交易款項"去作設定





















Step4:
接著點選"管理自動付款"





















Step5:
已經在任天堂綁定過Paypal付款,到了這頁就可以看到有任天堂的選項,點選這個圖案進去設定





















Step6:
點選下方綁定的信用卡,旁邊的編輯圖案





















Step7:
點選"查看貨幣轉換選項"





















Step8:
最後一個步驟,把這個頁面的設定改為信用卡轉換,再按下同意,就成功了!





















2021年6月27日 星期日

在Switch(NS)的eShop商店,跨區購買便宜數位版遊戲的方法

這篇跟大家介紹購買便宜的數位版"煮過頭1+2"的方法

首先你必須要有一個任天堂帳號,因為數位版遊戲,必須綁定此帳號,請用手機或電腦,至下面任天堂網站先註冊一個帳號: 登入or註冊

註冊完成後,我們可以透過這個網站去切換所在的區域,操作如下圖:
有一件事,要先提醒使用者,台灣地區是沒有提供eShop,所以你會發現,當地區為台灣,你從Switch登入後,到eShop會提示你無法進入~
















上圖當中可以看到,我把區域切成日本,因為我本身有Paypal帳號,eShop除了可以透過信用卡刷卡之外,也提供使用paypal付款,而切成日本區域之後,我們可以在"商店選單"裡面來作設定,設定完成後,在eShop裡面除了可以選信用卡付款之外,也可以選擇透過Paypal來付款,操作如下圖:
而Paypal的好處,則是可以在俄羅斯聯邦這類國家,當信用卡刷不過,就可以透過Paypal來付款














接下來要示範如何透過跨區,用最低價來購買一個數位版遊戲 (煮過頭1+2合輯)
首先我們先從"遊戲盒子"APP,看到煮過頭1+2只需要台幣375,而且必須跨區到"俄羅斯",所以第一部,必須利用上面的方法,先切換到俄羅斯區域,"遊戲盒子"的資訊,如下圖:














接下來的操作是在你的Switch上面,請選擇Nintendo eShop,接著會要求你選擇任天堂帳號,請選擇上面步驟建立好,並且已經跨區的帳號,如下圖:
















接著會進入到eShop的頁面,也就是購買數位版遊戲的頁面,頁面會是看不懂的文字(俄羅斯文),不過我幫你翻譯好了,可以從"減價"或"排行榜"去找你要買的遊戲,可能會無法搜尋,不過最近減價的,都可以從減價頁面找到












選擇遊戲之後,會到下面這個購買的頁面,選擇右邊頁面第一個選項,也就是"購買",然後記得確認一下金額,是否與遊戲盒子看到的價錢相同。有些遊戲會有兩個選項,我這邊以NBA 2021舉例(香港區的頁面),可以看到第二個選項是"下載體驗版"
















按了購買之後,接著會跳下個頁面,選擇付款方式,可以看到下圖,付款方式有信用卡,與Paypal可以選擇,此次我是選擇Paypal付款,因為我跨區到俄羅斯聯邦,有很多人嘗試用信用卡,遇到刷不過的問題,因此這邊教學是用Paypal購買,如果是要用信用卡付款,則更簡單,選擇第一個"信用卡"選項即可。











選擇Paypal付款,則會到接下來的頁面,這邊會有好幾個選項,是在詢問你要透過Paypal綁定的信用卡,加值多少金額來作付款,我們選第一個選項就可以,也就是儲值此次需要的金額即可










接下來會跳到這個頁面,我們需要去右邊的頁面打勾,表示同意,接著點選購買的按鈕,如下圖











最後有這個頁面,表示購買成功,然後出現感謝您的畫面。這樣就表示你有成功透過Paypal付款了,最後記得先把任天堂帳號的區域選項,再改回台灣,接著回玩遊戲的頁面,就會看到遊戲正在下載了,台幣375元的煮過頭1+2就入手了,語言也是繁體中文! 









在這個頁面,選第一個選項,就會開始下載了


2021年6月20日 星期日

購買便宜的Switch數位遊戲(NS),跨區購買,遊戲箱子App介紹

 入坑Switch的玩家,應該都會發現,會不停的買新的遊戲來玩,這些遊戲都很燒錢,一片動輒1000元起跳,我先來比較一下實體遊戲片,與數位遊戲的優缺點

==== 實體遊戲片====
優點: 玩膩了可以便宜轉賣,尤其是馬利歐系列的遊戲,都很好轉賣
缺點: 價錢昂貴

==== 數位遊戲 ====
優點: 價格比較便宜,有時候特價會折到2折3折
缺點: 必須綁定自己的任天堂帳號,無法轉售

接下來,假設你還是會想買數位版遊戲,我會推薦你安裝"遊戲箱子" APP,Android與Iphone都有,是免費的APP,這個APP會幫我們整理出,有哪些遊戲是正在特價的

這些數位的遊戲,任天堂在每個國家賣價都不太一樣,這個APP也會幫我們整理出哪個國家價錢最低,我們就可以切換到那個國家區域來用最低的價錢買遊戲,接下來我們介紹一下怎麼去看跨區的價錢,以及那個區域買的遊戲是否有支援我們要的語言











安裝完成之後,進到APP頁面,可以看到有哪些特價的遊戲,我們可以點選"更多",或是透過搜尋找看看有沒有自己想要的













這邊我們用"航海王"為介紹的範例,這邊可以看到墨西哥賣台幣196元,另外美國賣台幣222元,加拿大則賣TWD.234元,看不懂國旗或是看更詳細的價錢,點選總覽旁邊的"價格"












點選價格後,可以看到下圖,列出了更詳細的價錢,以及更多國家的價錢,可以看到最便宜的是墨西哥,墨西哥幣是145.8元,換算台幣為196TWD,另外也可以看到各國家的價錢












接下來,要看的是資訊,如下圖,"資訊"會列出各個區域買的遊戲,可以支援哪一些語言,這邊沒有寫墨西哥的資訊,但在上上一張圖片,墨西哥後面有寫支援"繁體中文",但如果想保守一點,確定買的遊戲有支援繁體中文,這邊有寫了美洲有支援繁體中文,,就花TWD.222跨美國去購買吧












接著是討論的部分,這部分是網友們的留言,有時候會有有用的資訊,你也可以在這上面留言發問












再來是影音,這邊就會介紹遊戲中的圖片,還有官方的遊戲影片












以上是"遊戲箱子"幫忙整理出來的訊息,對於想要跨區購買便宜遊戲的朋友,真的是很有幫助,下一篇文章再來介紹,如何實際來跨區購買遊戲~

2021年6月11日 星期五

新冠疫苗的一些介紹影片,看完就知道為什麼

 最近從網路上看到一些影片在講Covid-19疫苗的一些知識,我把兩部影片連結放在下面,看完真的長知識了~


1. 為什麼買不到疫苗,不是說要買就可以買到
https://m.bilibili.com/video/BV1eK4y1X7TQ


2. 各種新冠疫苗的效力 是怎麼統計出來的
https://youtu.be/rS6S5vK77pA

git checkout 到歷史某個版本的方法

 當想要把整個branch回到以前的某一個 git hash,可以用下面的方法

1. 在branch 目錄下,使用command :

# git log       

我們可以看到所有的log 紀錄,包含很長一串的 hash碼










2. 假如想要回到上圖的紅色框框版本,只需使用git checkout command如下:

# git checkout e243a6ea1da337db1b03432f07c6ba57cce221f2         


2021年6月8日 星期二

Linux底下該如何切換python版本,使用 update-alternatives 安裝python,以及切換python版本

 安裝python以及切換python版本,在此篇文章中,我們都使用工具 "update-alternatives" 來達到目的

如果Linux底下沒有此工具,請輸入下面指令來安裝:
sudo apt-get install update-alternatives


按照下面指令,可以分別安裝 3.5.3版 以及 2.7.2版 的python

update-alternatives --install /usr/bin/python python /usr/bin/python3.5 3

update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2


我們也可以透過此工具來切換目前想要的python版本:
sudo update-alternatives --config python

會出現如下畫面,請輸入0,1,2來選擇你想要切換的版本


2021年6月6日 星期日

Altis 11代 換空濾(空氣濾網) DIY

 大家好,今天介紹如何DIY更換空濾,空氣濾網簡稱空濾,從外部要進入引擎的空氣,都會通過這個空氣濾網,空濾幫忙過濾外部的髒空氣,最後到引擎.

新的空濾,我是上網買的,只需跟網路賣家確認好,是Altis 11代可以使用的即可












Step1. 首先我們先來看一下空濾位於引擎室的位置,空濾就裝在引擎室的黑色盒子裡面,如下圖 :




















Step2. 接著,我們要來打開這個裝空濾的盒子,盒子的左右邊各有一個金屬的扣環,如下圖:
















Step3. 把兩邊的金屬扣環往下扳,如下圖:
















Step4. 接著就可以把合子拆開,先從盒子的上方打開一點點,接著盒子下方有兩個卡溝,盒子上方打開後,稍微往前推,讓兩個卡溝離開,盒子就打開了,如下圖(看到空濾本體,手拿的地方是其中一個卡的地方):






















Step5. 接著把盒子稍微打開一些,直到空濾可以抽出來,把空濾往上拿起後,往下方抽出,因為盒子沒辦法完全打開,讓空濾可以往下抽出來就好,抽出來的空濾和新的空濾比較一下,如下圖:






















Step6. 最後要把新的空濾放進去盒子裡面,要注意的有兩點,空濾的四個角落,有一個角落會做得比較尖,其他三個比較圓弧,所以:
    重點1,比較尖的要在左下方
    重點2,有字的那一面朝上






















然後要放進的時候,把盒子打開到空濾可以放進去的大小就好,不要扳開太大力,把空濾由下往上放進盒子裡面,放進去之後,只要確認空濾方向是對的,把盒子蓋上後,金屬扣環就可以輕鬆的扣上,這樣就大功告成了~

2021年5月22日 星期六

[生活] 蝦皮商城購物,電子發票查詢,載具歸戶的方法

 購買蝦皮商城,蝦皮會開電子發票,而電子發票怎麼查詢呢?

首先我們可以先到已完成的訂單,"訂單詳情"查看,如下圖藍色框框處:

可以看到發票號碼,而詳細的發票內容,必須再到email查詢(這樣其實有點麻煩)












今天要教大家的,就是蝦皮所開立的發票,可以用下面的方法,

把發票都歸戶到,財政部電子發票整合服務平台,

而且這個動作做過一次,以後蝦皮開立發票,都會自己歸戶到財政部的平台上

因此查詢發票明細,都可以直接到財政部的APP上面查看,接下來就跟大家介紹步驟

1. 首先,先到下面連結網站

關貿網路電子發票平台 (畫面如下圖):

https://eci.tradevan.com.tw/APSSIC/gov/gov001!toQueryPage.action?qry.companyun=56801904











2. 在此頁面首先填寫發票號碼 (查詢方法,本文最前面有說明)

3. 接著填入"會員編號" 與 "歸戶驗證碼",查詢這兩項的方式,如下說明:



==== step1 ====











==== step2 ====













==== step3 ====











==== step4 ====











4. 填寫好發票月份 (最好是找近期的發票)

5. 最後填入驗證碼(如網頁圖片中的數字),按下"驗證"按鈕,就會跳轉到蝦皮購物-發票查詢與歸戶頁面 












6. 接著按下"查詢"按鈕,會列出你的所有電子發票,接著點選"載具歸戶",就會跳轉到"財政部發票整合平台"(此時已經將蝦皮電子發票都歸戶),最後登入財政部電子發票整合服務平台,就可以查看發票






















總結: 最後手機去下載 "統一發票兌獎"APP,這個就是財政部發票整合平台開發的APP,以後只需登入此APP就可以查詢蝦皮發票明細了! 還可以自動幫你兌獎,是不是很讚~