protobuf 提供了 structure 到 binary 的讀/寫 定義方式。
在 abc.proto 中定義了 structure.
再用 protoc 產生 C or python code,就會有 serializetostring 和 parsefromstring 兩個 讀/寫 檔的 function.
onnx 就是利用 protobuf 來做onnx
2024/9/22
2024/9/20
RV1106 luckfox pico build and download
rv1106 的燒錄工具是 Soctoolkit,不是 Rkdevtool.
Soctoolkit 的 partition layout 是在 env.image.
類似 Rkdevtool 的parmeter.txt
以 Luckfox Pico為例,要進入 bootrom (MASKROM) 的方式是按著 boot 按鍵開機。
因為 Type C 兼顧供電與通訊,所以就是按著boot 鍵,插入 usb,放掉 boot 鍵。
這樣就會進入 maskrom,然後 Soctoolkit 就會顯示 USB : MASKROM 版本
之後在 search path 選到 sdk build 玩的 image 目錄 (例如 ~\luckfox-pico\IMAGE\SPI_NAND_RV1106G-LUCKFOX-PICO-PRO-MAX.DTS_20240920.1158_RELEASE_TEST\IMAGES)
他就會自己找到 env.image, load 完後,所有 partition 和 img file 都會列出來。
Soctoolkit 的 partition layout 是在 env.image.
類似 Rkdevtool 的parmeter.txt
以 Luckfox Pico為例,要進入 bootrom (MASKROM) 的方式是按著 boot 按鍵開機。
因為 Type C 兼顧供電與通訊,所以就是按著boot 鍵,插入 usb,放掉 boot 鍵。
這樣就會進入 maskrom,然後 Soctoolkit 就會顯示 USB : MASKROM 版本
之後在 search path 選到 sdk build 玩的 image 目錄 (例如 ~\luckfox-pico\IMAGE\SPI_NAND_RV1106G-LUCKFOX-PICO-PRO-MAX.DTS_20240920.1158_RELEASE_TEST\IMAGES)
他就會自己找到 env.image, load 完後,所有 partition 和 img file 都會列出來。
2024/9/6
新 android 的一些 build 動作改變
上次做Android 是 android 6 還是 8,現在已經是14 了。
紀錄一下現在的樣子。
showcommands
已經不用 showcommands,反而是會把 build log 放到 out/verbose.log.X.gz
partitions
用 device-mapper 而不是直接 mount。
所以 mount 看到的都是 /dev/block/dm-0,1,...
另外,有包含很多 partition 的 super partition
對應 super.img 的工具有:
紀錄一下現在的樣子。
showcommands
已經不用 showcommands,反而是會把 build log 放到 out/verbose.log.X.gz
partitions
用 device-mapper 而不是直接 mount。
所以 mount 看到的都是 /dev/block/dm-0,1,...
另外,有包含很多 partition 的 super partition
對應 super.img 的工具有:
- lpmake
- simg2img
- lpunpack
2024/9/5
test gdb step into virtual function
#include <iostream>
#include <cstdlib>
#include <ctime>
class Base {
public:
virtual void show() {
std::cout << "Base class show function" << std::endl;
}
virtual ~Base() = default;
};
class Derived1 : public Base {
public:
void show() override {
std::cout << "Derived1 class show function" << std::endl;
}
};
class Derived2 : public Base {
public:
void show() override {
std::cout << "Derived2 class show function" << std::endl;
}
};
void callShow(Base* obj) {
obj->show();
}
int main() {
std::srand(std::time(0)); // 設定亂數種子
Base* b;
if (std::rand() % 2 == 0) {
b = new Derived1();
} else {
b = new Derived2();
}
callShow(b);
delete b;
return 0;
}
2024/9/2
gitlab api , set default branch
ref:
gitlab ce 的rest api 的url 是
在 gitlab 的 rest api resource 頁面,以runners 為例。
gitlab 的所有project,都有一個 id,例如 MISC/testwebapi2:
上面例子的 :id 就是改成 3756。
:id 其實有兩種表示法,一種是剛剛說的 unique id。
另一種就是 namespaced path encoding.
以上面 MISC/testwebapi2 為例,要是完整寫進 url 中, "/" 就會跟後面的 /jobs 混淆。
所以 project 的 path 中的 "/" 要改成 "%2F" : MISC%2Ftestwebapi2
也就是說,上面的例子, :id 可以是 3756,也可以是 MISC%2Ftestwebapi2
request header 的 token 就去 gitlab 的頁面create 一個。
可以在user 的頁面create,也可以在 project, group 的setting create,每個地方 create 的 token,應用範圍不一樣。
有關 set default branch...
第一篇是說:
例如,create new project in subgroup:
project 指定可以用 id (gitlab 的subgroup, project 都有 id)
也可以用 namespace (就像是 path)
不過 path 的 '\' 要改成 %2F
所以 /misc/testwebapi2,project id 是 3756,要 create new branch 可以:
要設定 default_branch 的話,就是參考 edit project 的範例:
API 是:
id 可以用 project id,或是用 pathname (/ 改 %2F)
所以,設定 MISC/testwebapi2 的 defultbranch 是 newbranch2:
- Set default branch through API
- Gitlab change default branch for every project
- Howto change default branch for a repository by CLI or API
- gitlab api : edit project
gitlab ce 的rest api 的url 是
http://gitlab.loyaltek.com/api/v4/之後就是 rest api 的 api resource,例如 projects, groups, users..
在 gitlab 的 rest api resource 頁面,以runners 為例。
GET /runners/:id/jobs就是說:
- http method : GET
- uri endpoint: /runners/:id/jobs
curl -X GET -H "PRIVATE-TOKEN=XXXXX" -url "http://gitlab.loyal.com/api/v4/runners/:id/jobs"其中 :id 是指 gitlab 中的 project。
gitlab 的所有project,都有一個 id,例如 MISC/testwebapi2:
上面例子的 :id 就是改成 3756。
:id 其實有兩種表示法,一種是剛剛說的 unique id。
另一種就是 namespaced path encoding.
以上面 MISC/testwebapi2 為例,要是完整寫進 url 中, "/" 就會跟後面的 /jobs 混淆。
所以 project 的 path 中的 "/" 要改成 "%2F" : MISC%2Ftestwebapi2
也就是說,上面的例子, :id 可以是 3756,也可以是 MISC%2Ftestwebapi2
request header 的 token 就去 gitlab 的頁面create 一個。
可以在user 的頁面create,也可以在 project, group 的setting create,每個地方 create 的 token,應用範圍不一樣。
有關 set default branch...
第一篇是說:
DEFAULT_BRANCH="develop"
sleep 5
$(curl -sS -X $METHOD \
-H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
--url "$GITLAB_URL/projects/$1" \
--data "default_branch=$DEFAULT_BRANCH")
例如,create new project in subgroup:
curl --request POST --header "PRIVATE-TOKEN: glpat-FtpBssK5S5U6UMdkmcvL" \ --data "name=testwebapi2" \ --data "namespace_id=197" \ "http://gitlab.loyaltek.com/api/v4/projects"這個 namespace_id 就是 subgroup 的 id,在 gitlab 的 group 頁面,會有 id: 197
project 指定可以用 id (gitlab 的subgroup, project 都有 id)
也可以用 namespace (就像是 path)
不過 path 的 '\' 要改成 %2F
所以 /misc/testwebapi2,project id 是 3756,要 create new branch 可以:
curl --request POST --header "PRIVATE-TOKEN: glpat-FtpBssK5S5U6UMdkmcvL" \ --url "http://gitlab.loyaltek.com/api/v4/projects/3756/repository/branches?branch=newbranch&ref=master"或是
curl --request POST --header "PRIVATE-TOKEN: glpat-FtpBssK5S5U6UMdkmcvL" \ --url "http://gitlab.loyaltek.com/api/v4/projects/MISC%2Ftestwebapi2/repository/branches?branch=newbranch2&ref=master"也就是 url中,projects 後的 id 3756 改成 MISC/testwebapi2,因為要把 "/" 改掉以免線後麵的 repository 混搖,所以規定改成 %2F
要設定 default_branch 的話,就是參考 edit project 的範例:
API 是:
PUT /projects/:id
- METHOD : PUT
- resource: projects
id 可以用 project id,或是用 pathname (/ 改 %2F)
所以,設定 MISC/testwebapi2 的 defultbranch 是 newbranch2:
curl --request PUT --header "PRIVATE-TOKEN: glpat-FtpBssK5S5U6UMdkmcvL" \ --url "http://gitlab.loyaltek.com/api/v4/projects/MISC%2Ftestwebapi2" \ --data "default_branch=newbranch"
2024/8/9
修復epub -- for google books
google books 常常會 process fail, 不知道是什麼原因。
原來有修復的方法: 原來就是用calibre這個軟體,加入 epub,然後 "ˋ轉換書本",
本來這個功能是要把 其他格式的文件轉成 epub用的,
現在是從 epub 轉 epub
轉的時候還可以加上封面。
轉完儲存就可以有新的 epub
linux 安裝 default 是裝在系統 /opt ,所以需要 root 權限。
如果裝在 自己的 home 就不用。
原來有修復的方法: 原來就是用calibre這個軟體,加入 epub,然後 "ˋ轉換書本",
本來這個功能是要把 其他格式的文件轉成 epub用的,
現在是從 epub 轉 epub
轉的時候還可以加上封面。
轉完儲存就可以有新的 epub
linux 安裝 default 是裝在系統 /opt ,所以需要 root 權限。
如果裝在 自己的 home 就不用。
wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sh /dev/stdin install_dir=~/calibre-bin isolated=y其實就 download script 下來,run 的時候再加上 option 就可以了。
2024/6/25
rearrage local repo to mirror format
用.repo提供bsp,不給 repo server access 權限的。
自己要做 repo mirror.
用repo forall 來run 這個:
第一步,repo sync -l 後,要做 git clone 其中的 project,會出現 Error:
結果 .repo/project-object 裡面的 folder 安排方式就是 mirror 的方式,可惜 git 內容不是 mirror 的...
一些問題:
repo init 指定 -m XXX時,不單純只是把 manifest.xml 內容寫成 include XXX,同時會讀取 XXX 的內容,如果有問題,就會出現 Error,
然後這個 repo init 命令就會 Fail
manifests.git 所在位置和 manifest.xml 中,remote tag 的 fetch 有關,fetch="..\.." 的話,manifests.git 就要在 跟目錄的下一層通常是 platform 下。
如果直接在 project root,就用 fetch=".." 就可以。
做 repo sync動作時,會把git commit 內容輸出到 .repo/TRACE_FILE。
或是(舊版?),宣告環境變數 REPO_TRACE=1,可以輸出 Trace( ) 到 stdout.
同樣的,git 也可以輸出trace 就是用
自己要做 repo mirror.
用repo forall 來run 這個:
$ cat pp.py
#!/usr/bin/python
import os
import subprocess
rfolder ='/home/charles-chang/rr3/'
lfolder ='/home/charles-chang/MY_Android14/'
repo_project = os.getenv('REPO_PROJECT','test/demo')
repo_path = os.getenv('REPO_PATH','repomirror')
pname = rfolder + os.path.dirname(repo_project)
print(f"REPO_PROJECT: {repo_project} {pname}")
print(f"REPO_PATH: {repo_path}")
os.makedirs(pname,exist_ok=True)
tname = rfolder + repo_project +'.git'
print(f"{tname}")
result = subprocess.run(["git","clone","--no-local","--mirror",lfolder+repo_path,tname])
就是:
repo forall -c /home/charles-chang/pp.py就會create一個 repo server folder: rr3
第一步,repo sync -l 後,要做 git clone 其中的 project,會出現 Error:
結果是因為 symbolic link 的關係:
- Bitbake do_fetch error /.git/objects: not a directory
- builtin/clone.c: disallow --local clones with symlinks
- clone: error specifically with --local and symlinked objects
結果 .repo/project-object 裡面的 folder 安排方式就是 mirror 的方式,可惜 git 內容不是 mirror 的...
一些問題:
repo init 指定 -m XXX時,不單純只是把 manifest.xml 內容寫成 include XXX,同時會讀取 XXX 的內容,如果有問題,就會出現 Error,
然後這個 repo init 命令就會 Fail
manifests.git 所在位置和 manifest.xml 中,remote tag 的 fetch 有關,fetch="..\.." 的話,manifests.git 就要在 跟目錄的下一層通常是 platform 下。
如果直接在 project root,就用 fetch=".." 就可以。
做 repo sync動作時,會把git commit 內容輸出到 .repo/TRACE_FILE。
或是(舊版?),宣告環境變數 REPO_TRACE=1,可以輸出 Trace( ) 到 stdout.
同樣的,git 也可以輸出trace 就是用
GIT_CURL_VERBOSE=1 GIT_TRACE=1
訂閱:
文章 (Atom)