##memo用
_MSC_VER 跟 VC++ version 的關係
VC4~VC12
計算公式 (VC++ version + 6)×100
e.g. VC12: (12 + 6)×100 = 1800
VC14~
計算公式 (VC++ version + 5)×100
e.g. VC14: (14 + 5)×100 = 1900
_MSC_VERと_MSC_FULL_VERをまとめる
https://qiita.com/yumetodo/items/8c112fca0a8e6b47072d#visual-studio%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%A8%E5%88%A4%E5%88%A5%E3%83%9E%E3%82%AF%E3%83%AD
2019年4月15日月曜日
2019年4月1日月曜日
[Linux] 用 git 把 Linux Kernel 的 source code 抓下來的方法
抓 kernel source 最簡單的方法當然就是直接到官網 → kernel.org
然後把 source code 以 tarball 的方式抓下來
不過這次要講的不是這個方法
這次要講的是用 git 把它從遠端 repo 給抓回來的方法
在 kernel 的 repo 中有多到不行的東西
不過我們這次只是要抓穩定版的 kernel source
所以直接往下找到 stable 的地方
這個 repo 就是我們要的東西了
所以把它給抓回來
向下面這樣
抓完就會在資料夾裡面看到完整的 kernel source code 了
是說測試完發現
好像會自動導向
所以不管是哪個好像都可以的樣子
大概就是這樣了
然後把 source code 以 tarball 的方式抓下來
不過這次要講的不是這個方法
這次要講的是用 git 把它從遠端 repo 給抓回來的方法
在 kernel 的 repo 中有多到不行的東西
不過我們這次只是要抓穩定版的 kernel source
所以直接往下找到 stable 的地方
這個 repo 就是我們要的東西了
所以把它給抓回來
向下面這樣
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
抓完就會在資料夾裡面看到完整的 kernel source code 了
是說測試完發現
git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
好像會自動導向
git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
所以不管是哪個好像都可以的樣子
大概就是這樣了
2019年3月20日水曜日
[docker]在 Ubuntu 18.04 下安裝和使用 docker
首先 Ubuntu 官方的 repo 中所提供的 docker 並不一定是最新的。
所以改從 Docker 官方的 repo 來安裝。
先更新 package list
然後安裝必要的 package
而且這些 package 必須要可以通過 HTTPS
接著將 docker 官方 repo 的 key 加到系統中
把 docker 的 repo 加到 apt source 裡
然後再更新一次 package list
為了確保我們安裝的是 docker 官方的版本
而不是 ubuntu 所提供的版本
這時候可以先用 apt-cache policy 檢查一下優先性
然後就是安裝docker 了
安裝完之後
沒意外的話 docker 應該就會自己活著了
這時候可以用 systemctl 確認 docker 的狀態
到這邊基本上 docker 的安裝就算完成了。
接下來就是執行的部份了
先抓個 ubuntu 映像檔回來
從 docker 的 repo 中搜尋 ubuntu
當然不要 ubuntu 的話也可以考慮裝其他的
不過我偷懶只想裝 ubuntu
所以我只抓 ubuntu 下來
抓下來的指令就一行
然後就可以啟動它了
最後要保存 docker 的狀態的話
先用下面的指令查看一下它的版本號
上面這個指令可以幫助你取得 ID
然後就可以使用下面的指令把變動 commit 上去了
docker commit [ID] [CONTAINER] [REPOSITORY[:TAG]]
一個使用實例大概看起來像這樣
這篇大概就這樣了
所以改從 Docker 官方的 repo 來安裝。
先更新 package list
sudo apt update
然後安裝必要的 package
而且這些 package 必須要可以通過 HTTPS
sudo apt install apt-transport-https ca-certificates curl software-properties-common
接著將 docker 官方 repo 的 key 加到系統中
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
把 docker 的 repo 加到 apt source 裡
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
然後再更新一次 package list
sudo apt update
為了確保我們安裝的是 docker 官方的版本
而不是 ubuntu 所提供的版本
這時候可以先用 apt-cache policy 檢查一下優先性
apt-cache policy docker-ce
然後就是安裝docker 了
sudo apt install docker-ce
安裝完之後
沒意外的話 docker 應該就會自己活著了
這時候可以用 systemctl 確認 docker 的狀態
sudo systemctl status docker
到這邊基本上 docker 的安裝就算完成了。
接下來就是執行的部份了
先抓個 ubuntu 映像檔回來
從 docker 的 repo 中搜尋 ubuntu
docker serach ubuntu
當然不要 ubuntu 的話也可以考慮裝其他的
不過我偷懶只想裝 ubuntu
所以我只抓 ubuntu 下來
抓下來的指令就一行
docker pull ubuntu
然後就可以啟動它了
docker run -it ubuntu
最後要保存 docker 的狀態的話
先用下面的指令查看一下它的版本號
docker ps -l
上面這個指令可以幫助你取得 ID
然後就可以使用下面的指令把變動 commit 上去了
docker commit [ID] [CONTAINER] [REPOSITORY[:TAG]]
一個使用實例大概看起來像這樣
docker commit XXX any-name/ubuntu
這篇大概就這樣了
2019年3月16日土曜日
[Android Studio] windows 上的 AS 3.x 的 NDK 不支援 mips 的問題
這次遇到的問題是在 Android Studio 的環境設定時
出現了下面這個錯誤訊息
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
大部分都是說從官網把 NDK 抓下來
再把缺少的部分加進去就可以了
可是實際上 NDK 從 R18 開始就不支援 mips 了
所以除非抓舊版的
不然再怎麼抓也不會有 toolchain 可以用
所以只好換個方法
看起來直接建立連結是個好方法
不過找了半天都是教 Linux 底下怎麼建連結
所以這篇用來幫自己記錄一下 Windows 底下怎麼建連結
首先從 [File]→[Project Structure] 中找到 NDK 的安裝路徑
然後用 CMD 敲個 mklink 建立連結
mklink /D mips64el-linux-android aarch64-linux-android-4.9 mklink /D mipsel-linux-android arm-linux-android-4.9
建完之後看看 folder 底下就會多出 2 個像捷徑的資料夾了
大致上就是這樣了
2018年11月9日金曜日
[Ubuntu] 在 Ubuntu 18.04 上開發 kernel module
在做 Embedded Linux 開發的大部分時間中
通常很多東西都是平台相依
所以只要沒有板子就沒辦法做任何的測試
但當然也有些東西是不需要板子就可以做測試
所以這篇就是要說
怎麼在 Ubuntu 上進行 kernel module 開發
然後寫好之後進行驗證
當開發平台跟執行平台都是同一個的時候
這意味著這個動作完全不會用到 cross compiler
也就是說如果要驗證交叉編譯的東西的話
基本上這個方法不適用
不過如果只是想做個 kernel module 開發的話
基本上是沒什麼問題才對
所以下面就開始說明大概要做哪些事
首先需要把開發所使用的 Ubuntu 平台變成有編譯 kernel module 的能力
所以需要安裝一些東西
安裝開發工具
sudo apt install build-essential kernel-package libncurses5-dev libelf-dev gcc g++
基本上工具有這些就足夠了
但是還需要安裝 kernel 開發用的 library source
所以還需要再做點事情
安裝 linux-headers
在安裝之前需要先查看一下現在使用的平台的 kernel 版本
apt-cache search linux-headers-$(uname -r)
看起來大概會像上面那張圖一樣
是一個 看起來像是 linux-headers-X.Y.Z-V-M 的格式
通常格式的最後一串英文字表示平台的種類
至於為什麼要這個
是因為接下來的開發會在這個平台上執行跟測試
所以必須先查看這個平台的資訊
不然等等做出來的檔案會沒辦法執行
也就是說如果要在其他平台上執行
至少要先確認要執行的平台的環境才是
檢查完之後接著就是安裝 linux-headers 了
sudo apt install linux-headers-$(uname -r)-generic
這邊我偷懶了
因為直接代入 $(uname -r)
所以其實前面那個版本號查不出來也沒關係
到這邊基本上就完成所以的 kernel module 開發的前置作業了
接下來就可以開始寫 code 了
製作 kernel module
首先隨便找個路徑用來做 kernel module
然後在資料夾下面產生一個 Makefile 和 .c source file
看起來會像下面這張圖這樣
然後看看 Makefile 裡面長怎麼樣
然後再來看看 source
基本上這只是個 sample 而已
所以就不要太計較了...OTL
然後就可以編譯它了
沒意外的話
編譯完應該會長的類似上面那張圖一樣
然後就可以看看它產出了什麼東東
正常來說
如果有編譯成功的話
會在路徑下找到一個 .ko 檔
這個就是一個可以搬的走的 kernel module 了
既然寫好了
當然就是把它掛載起來執行看看啦
掛載 kernel module
這邊因為是製作成 loadable 的模組
所以基本上只能使用 insmod 來掛載
因為在 系統的 lib module 中 並不存在這個 module
所以 modprobe 是沒有辦法使用的 ...
然後掛載起來看起來會像下面這樣
敲個密碼
然後什麼事都沒有發生就結束了
所以那剛剛那個 printk 的訊息印到哪去了?
查看 kernel 訊息
這時候就要請出另外一個叫做 dmesg 的指令了
至於這張圖裡面為什麼會有那麼多奇怪的內容
是因為在寫這篇之前我正在幫我的 module debug...
而這篇的範例就是用它改出來的
所以這點小事就不要太計較了XD
最後如果這個 module 不是設計來常駐的話
記得把它卸載
卸載 kernel module
看起來像下面這張圖一樣
一樣什麼訊息都沒顯示
這時候再看一次 dmesg
這時候就會看到離開的訊息了
話說回來
實際上根據不同的 kernel message 等級
其實 dmesg 是會有顏色的
這樣看起來就清楚多了
然後這篇大概就是這樣了
それでは(・ω・)ノシ
2018年11月8日木曜日
[Ubuntu] 在 Ubuntu 18.04 上安裝多個 gcc/g++ 版本並切換
前一陣子在做開發的時候遇到了一些小問題
就是有時候某些專案所指定的 gcc/g++ 必須使用特定的版本
但不幸的是這些專案都指定必須要使用 host gcc/g++ 的設定
所以就必須要讓多個 gcc/g++ 的版本共存在 host 端
但即便是已經存在了多個版本的時候還是會需要手動切換不同的版本
所以就有這篇了
先檢查看看有沒有 gcc/g++
因為 gcc/g++ 兩個使用的是完全一樣的動作
所以下面偷懶 只用 gcc 舉例
g++ 的部份就把 gcc 換成 g++ 就行了
查看當前 gcc 的版本
gcc -v
如果這樣沒有出現 gcc 的版本訊息的話
表示系統裡不存在 gcc
這時候需要先安裝 gcc/g++
安裝的指令
sudo apt-get install -y gcc-4.8 g++-4.8 gcc-4.9 g++-4.9 gcc-5 g++-5 gcc-6 g++-6 gcc-7 g++-7
這邊安裝的 gcc 版本可以依照自己喜歡的選擇
如果這個時候發現想要的版本抓不下來的時候
也許還有其他選擇
改從其他地方抓
所以這個時候要先增加一個 repository
新增 repo
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test sudo apt update
如果這時候你的 gcc/g++ 版本很多很亂
也可以選擇先把它們全部移除
從 update-alternatives 移除所有的 gcc/g++
sudo update-alternatives --remove-all gcc sudo update-alternatives --remove-all g++
這樣會從 update-alternatives 中移除所有的 gcc/g++ 選項
對 update-alternatives 安裝想要的 gcc/g++
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 30 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 40 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 10 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 30 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 40 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 50
上面這些版本必須是前面剛剛已經先從 apt install 裝完的各個版本
每個指令最後的那個數字表示預設的優先度
數字越大就越高
設定 預設 gcc/g++ 的版本
最後在安裝完之後就是對 update-alternatives 進行設定sudo update-alternatives --set cc /usr/bin/gcc sudo update-alternatives --set c++ /usr/bin/g++
之後要切換版本的時候就只要執行 config 就可以了
切換 預設 gcc/g++ 的版本
sudo update-alternatives --config gcc sudo update-alternatives --config g++
大概是這樣
2018年11月5日月曜日
[Ubuntu] Ubuntu 18.04 掛載 exFAT 硬碟
最近因為遇到檔案大於 4G 用隨身碟傳輸時候沒辦法用 FAT32
所以只好格式化成 exFAT
結果 Ubuntu 預設竟然沒有辦法讀取...=v=
不過還好裝個工具就解決了
安裝的時候不用先卸載 隨身碟裝置
只需要把資料夾先關掉
是說根本掛載失敗了你也打不開就是了ww
然後安裝完之後
就可以直接打開隨身碟了
安裝的指令
sudo apt install exfat-fuse exfat-utils
就這樣沒了
登録:
投稿 (Atom)