2023年11月29日星期三

編譯 Yocto SDK toochain 包含 Linux kernel 的 header 與 source (Build Yocto sdk include kernel header and source)

Step1:
我使用的
Yocto Project為2.6版,編譯SDK的指令如下: (以 MTK平台為例, xxxx 帶入自己的platform)
bitbake mtk-image-xxxx -c populate_sdk  


Step2:

用以上指令,編譯出來的Toolchain並不包含kernel header或是 kernel source,查詢網頁之後,得知需要再包含編譯這個Package “kernel-devsrc”


Step3:
接著我們在mtk-image-xxxx.bb 裡面,加上這個package,IMAGE_INSTALL_append += "kernel-devsrc"
Path: meta/meta-mediatek-mtxxxx/recipes-core/images/mtk-image-xxxx.bb
如下圖:





Step4:
接著編譯SDK,會遇到以下的錯誤訊息:

Fix kernel-devsrc package failing during install This issue is due to the upstream script hardcodes /bin/awk whereas we ship /usr/bin/awk. The installation check will break in this case. Fix it by changing the path in the script.

Step5:
從網路上,也看到有人在討論同樣的議題,有人提供patch方法,如下Link:

https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/11173/3/meta-agl-bsp/meta-ti/recipes-kernel/linux/linux-ti-staging_%2525.bbappend

於是我把這些修改加入meta/meta-mediatek-mtxxxx/recipes-kernel/linux/linux-mtk-extension_4.19.bbappend如下:





Step6:
接著繼續編譯SDK,結果出現以下的問題:
ERROR: mtk-image-xxxx-1.0-r0 do_populate_sdk: Could not invoke dnf. Command 
主要的錯誤訊息如下

Error:

 Problem: package target-sdk-provides-dummy-1.0-r0.sdk_provides_dummy_target conflicts with /bin/sh provided by busybox-1.29.3-r0.aarch64
- package kernel-devsrc-1.0-r0.autoxxxxevb_ivt_vp2 requires /usr/bin/awk, but none of the providers can be installed
- conflicting requests

Step7:
看了上面的錯誤訊息,其中一個錯誤是說,我們沒有安裝awk這個工具,因此我們試著安裝gawk. 我們接著到Yocto網站master branch底下,poky的路徑底下,搜尋awk

https://git.yoctoproject.org/poky/tree/?id=0a04692279f83637c0049cb1f91ac684f3fccf1f

於是可以看到如下的畫面,接著隨便點一個link,會到下面第二個頁面,我們可以從第二個頁面看到實際gawk的路徑為”meta/recipes-extended/gawk/”


















Step8:
接著就可以回到Yocto Tree的路徑,接著按照下圖步驟,可以找到gawk的reciepe. 

https://git.yoctoproject.org/poky/tree/meta?id=0a04692279f83637c0049cb1f91ac684f3fccf1f



















Step9:

我們選擇使用版本gawk-4.1.3,因為我們的Yocto為2.6版比較舊,選太新的recipe,有語法寫法不相同的問題(ex: gawk-5.x).於是分別把gawk_4.1.3.bb以及 gawk_4.1.3資料夾,放到我們的Yocto Project (這個網站不知道怎麼下載檔案,目前我是用複製內容,再vi gawk_4.1.3.bb 到Yocto Project當中)
path:meta/meta-mediatek-mtxxxx/recipes-extended/gawk_4.1.3.bb



Step10:

另外要記得,還要再從mtk-image-xxxx.bb那邊打開gawk,這樣才會編譯到gawk.去修改meta/meta-mediatek-mtxxxx/recipes-core/images/mtk-image-xxxx.bb






Step11:

再重新編譯一次,就可以成功編譯出包含kernel-devsrc的toolchain
*註:加入kernel-devsrc&gawk之後,整個 編譯後的 image增加了100MB

如何編譯Static library & 如何使用 (How to build a static library and share to others using)

這邊簡單寫一個example

====== printf.c ========

#include <stdio.h>
int print_hello()
{
    printf("This is a simple API example\n");
    return 0;

寫好這個API source code之後,先編譯出.o檔

gcc -c printf.c -o printf.o -I.


接著把.o檔,轉成.a檔

ar rcs printf.a printf.o


接著就可以寫一個主程式,去呼叫此API

如何使用此 Static Library,使用下面command編譯,可以產生test_main:

gcc main.c printf.a -o test_main -I.


也可以簡單寫一個 Makefile去做編譯(這邊解說Makefile 一小部分)
這邊是順帶的解說 Makefile語法,最主要還是要介紹,怎麼產生像是 printf.a 的 Static Library

###### Makefile 範例解說 #######

my_target: source_file.c header_file.h

gcc -o $@ $< -I.

$@: 表示目標,也就是 "my_target"

$<: 表示第一個依賴文件

2023年11月16日星期四

mpstat 的source code路徑,Yocto package名稱,與mpstat的用法

mpstat 與 top 指令,都是用來監控 CPU 使用率的工具
mpstat 是 Multiprocessor Statistics 的縮寫,它是 sysstat 這個套件裡面的一個工具

所以當我們要在Yocto裡面開啟這個工具,請記得是開啟 sysstat


如果要使用 mpstat這個工具,也可以用以下的 apt-get指令來安裝

apt-get install sysstat

sysstat 的opensource,我們可以從以下的網站來下載:
https://github.com/sysstat/sysstat


另外簡單介紹一下mpstat的使用方式

直接使用指令 mpstat:



使用指令 mpstat -P ALL 5 2:
參數所代表的意思為
    -P ALL: -P表示要監控哪個CPU,這邊帶入ALL,表示列出所有CPU的狀態
    5: 表示5秒印出一次
    2: 表示印2個回合



2023年11月15日星期三

Yocto Trace bb檔,了解其中參數,與debug的方法

假設在bb檔,或是 bbclass檔案裏面,有一些參數,我們會不知道實際的值
這時候,我們可以用 echo 印檔案的方式,導出到 deploy路徑底下的檔案,例如:

在某個bbclass檔案中,我們想知道, ${D} 與 ${STATE_DIR_FILE_PATH},這兩個參數的數值分別是什麼

此時,我們就可以在bbclass 檔案中加入下面兩行

echo ${D} > ${DEPLOY_DIR_IMAGE}/0001
echo ${STATE_DIR_FILE_PATH} > ${DEPLOY_DIR_IMAGE}/0002

最後我們編譯之後,再回到 Yocto Project 底下的這個路徑:
 build/tmp/deploy/images/你的platform名稱/

可以找到檔案 0001 與 0002
在使用 cat 把 0001 與 0002 的內容印出來,就可以知道參數的實際數值了!

2023年11月14日星期二

申請富邦快樂旅評卡,富邦旅遊不便險

 我之前就有申辦過富邦快樂旅平卡,所以每次要出國申辦旅遊不便險,就很方便
可以依據自己想要投保的金額來選擇,而且不只保自己的,還可以保家人的
以下來介紹一下保旅遊不便險的步驟


如果你沒申辦過快樂旅平卡,你必須先線上申請或臨櫃申請,如下圖:
線上申請網址,請到這個網址: 
https://www.fubon.com/insurance/b2c/content/prod_travel_compare/index.html 

點選下圖的,我要線上申辦 (不過還是需要列印填寫,並回傳資料)
需特別注意的是,雖然聲稱只需一個小時就可以辦妥旅平險,但申辦旅平卡,需要7個工作天







另外也可以依照富邦網站介紹的至臨櫃辦理,










當你有了富邦旅平卡之後,就可以開始申請旅平險
也是從這個網站的下圖,開始申請











Step1:
首先會需要填寫,你要保幾天的保險,計算方式說明如下:
*投保單位,以一天為單位

投保日期計算,舉個例子:
假設我的班機時間如下
2024/01/17 16:55 (台灣出發到日本)  ~    2024/01/23 9:00 (日本到台灣)

旅遊地區: 日本
因此可以投保 2024/1/17 16:00 ~ 2024/1/23 16:00  ,  共六天








Step2:
選擇大人投保金額,我是選擇100萬方案,詳細內容如下,可以接著點選套用到其他親屬:
















Step3:
小孩的投保方案,會自動被帶出最適合的,內容如下:














Step4:
2大2小,六天的總共保額,$912







Step5:
接著就下一步,可以選擇電子保單,或是紙本,然後可以直接線上信用卡付款
最後看到以下畫面就完成了!






2023年11月9日星期四

GPIO input high,遇到分壓的問題,基本電路,分壓的概念圖

 今天在做GPIO High/Low的測試,

我有個gpio input mode,我在電路板上面找一個1.8V電壓,外接一條電線
要用這個1.8V去讓GPIO偵測為 input high

硬體工程師說,最好在 GPIO PIN的前面,加入一個電阻,避免電流過大燒壞這個GPIO PIN

加入了之後,我用1.8V去碰觸這個 GPIO,從軟體端印出GPIO狀態,卻沒有被拉High

硬體工程師查了原因,可能因為是在1.8V的路上,有一個電阻
在GPIO PIN的前面,我們又加了一個電阻,造成分壓的情況,
導致電壓值沒有超過 GPIO PIN 所需要的上拉電壓值 (此數值需要看 GPIO Spec,這裡為1.3V)

分壓概念圖,大致如下:











另外分享一個分壓的計算網站,帶入你的每個電阻阻值,可以幫你算分壓

https://www.digikey.tw/zh/resources/conversion-calculators/conversion-calculator-voltage-divider










2023年11月5日星期日

解決 google blog 無法被搜尋的問題,關於sitemap

 之前一直從 google search console  要去解決無法被搜尋的問題

總是卡在 sitemap 的問題上,我在新增Sitemap 的部分,輸入我的blog 網址之後 ,點選提交,如下圖:





但審核總是有問題,大概的問題如下所示:







結果我發現,其實在新增Sitemap的時候,似乎要輸入 URL+"Sitemap.xml" 就可以成功,如下:
https://gigidandan.blogspot.com/sitemap.xml

後來我就可以看到,提交成功,還可以看到索引的網站個數:







我只能說,如果你們搜尋到我的這篇文章的話,就表示我這個修改方法成功了!

:D

Linux 更改 Mac Address 指令

 #先把ethernet0 停用
ifconfig eth0 down

#更改MAC Address
ifconfig eth0 hw ether AA:BB:CC:DD:EE:FF

#啟用ethernet0
ifconfig eth0 up


#最後在使用ifconfig 檢查
ifconfig

使用 lsblk 印出 emmc 每個 partition的"名字"與"size"

使用以下的command可以印出 eMMC的 partition資訊 lsblk --bytes --output name,partlabel,size   參數說明 --bytes: partition的大小,以byte的方式輸出 --output: 後面可以指定要輸出的內容...