2019年7月20日土曜日

在 Ubuntu 18.04 上安裝 pyenv

這篇主要是在講 python 的版本管理
前一陣子遇到了很多 python 2.x 跟 3.x 一直切換來切換去的問題
雖然手動一個一個慢慢換也是可以
不過就是麻煩
所以就只好來用一下現成的工具管理 python 了

TL;DR

在 terminal 裡面一行一行的敲完就會裝好囉ヾ(´∇`)ノ゙

$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

$ source ~/.bash_profile



把 pyenv 抓回來

這裡的範例是在 ~/ 目錄下弄一個 .pyenv 目錄把它放進去
看情況可以自己隨便找個喜歡的位置放就好
基本上這樣就裝好了!!

$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv

環境變數的設定

基本上每次啟動都要敲一次環境變數很麻煩
所以這裡就直接找個地方寫進去
讓開機的時候可以自動執行
這樣就不用每次都手動慢慢敲了
至於環境變數要加在哪裡其實不是太重要的事
要寫在 ~/.bash_profile 還是 ~/.bashrc 或其他地方都可以
反正只要開機執行的到就可以啦
這裡用 bash_profile 當例子
在 terminal 敲下面這幾行
~/.bash_profile 裡面就會多出這些東西了

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

或是你喜歡自己用 editor 把文件打開來寫
又或是你喜歡單次在 terminal 敲也是可以的

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

最後就是把剛剛寫進去的檔案 reload 一次讓它生效

$ source ~/.bash_profile

大概就是這樣了




沒事來湊一下篇幅順便紀錄一下東西
講一下 pyenv 和 virtualenv 和 pyenv-virtualenv 的關係

pyenv

用來管理 python 的版本的東西
簡單來說就是可以用來切換各種不同版本的 python
假設電腦裡同時存在 2.6, 2.7, 3.5, 3.6, 3.7 的版本
它就可以在這些不同的版本中進行切換
而且可以指定特定資料夾使用特定的版本

virtualenv

用來管理 package 的版本的東西
它不會管你的 python 到底是哪個版本
它只在意它底下的 package 是哪個版本而已

pyenv-virtualenv

這個就是把 virtualenv 當作外掛
然後綁在 pyenv 上的東西
簡單來說就是上面兩個的相加就是了
所以這個可以管理 python 版本也可以管理 package 的版本

用 pyenv 切換 python 版本

local 是用來切換當前路徑底下的版本
global 是反映整台電腦的版本

$ pyenv local 2.7.10
$ pyenv global 3.5.0

這篇就這樣沒了(´∀`)ノシ

2019年5月27日月曜日

[Deep Learning] 用 RTX2070 跑 tensorflow-gpu


網路上找了一堆 solution 結果都沒有能用的
最後找到了一個可以成功的
所以記錄一下

原本用 CPU 跑都沒事,但是換成 GPU 之後就一直出現這個錯誤
看了半天感覺是版本的問題
試了半天結果都沒什麼效果
















後來找到了下面這篇
[RTX2080でTensorflow-gpu]
http://blog.abars.biz/archives/52458625.html

裡面有提到
去下面這個地方抓人家打包好的檔案來用
https://github.com/fo40225/tensorflow-windows-wheel

CUDA Toolkit:
RTX 20 系列基本上可以用 cuda v10 以上的版本

cuDNN:
根據上面選的 whl 檔來決定要裝哪個版本就好
這個相對沒影響

2019年4月15日月曜日

Visual Studio 版本跟 VC 版本的關係

##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月1日月曜日

[Linux] 用 git 把 Linux Kernel 的 source code 抓下來的方法

抓 kernel source 最簡單的方法當然就是直接到官網 → kernel.org

然後把 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

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 是會有顏色的



















這樣看起來就清楚多了


然後這篇大概就是這樣了
それでは(・ω・)ノシ