2019年10月2日 星期三

Quick guide for building Raspberry Pi kernel 4


For  Driver course (www.ittraining.com.tw)

1) 安裝toolchain (Cross compiler)

# For 32 位元Linux 

export PATH=/home/student/pi/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin:$PATH

# For 64 位元Linux
export PATH=/home/student/pi/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi-x64/bin:$PATH


root@ubuntu:/home/student/pi# arm-linux-gnueabihf-gcc -v

..
gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03)





2) Linux kernel 編譯

#進入kernel source tree

cd linux  

# 產生 .config


For Raspberry Pi 2, Pi 3, Pi 3+, and Compute Module 3 default build configuration

KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

For Raspberry Pi 4
KERNEL=kernel7l
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig

#編譯 Linux kernel、kernel module 及 device tree

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j 2
# 安裝  kernel module

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=../modules modules_install



#複製kernel image & dtb 到 Raspberry Pi


sudo cp arch/arm/boot/zImage /boot/$KERNEL.img
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/


#複製 kernel modules 到 Raspberry Pi


tar zcvf modules.tar.gz  modules

scp modules.tar.gz root@192.168.1.141:/root

tar zxf modules.tar.gz
解開後將 <kernel version> 目錄放到 /lib/modules/


----------------------------------------------------
在 Raspberry Pi 編譯kernel module

1.) copy kernel source to  Raspberry Pi

scp linux-rpi-4.14.98-v7.tar.gz root@192.168.1.157:/root

tar zxf linux-rpi-4.14.98-v7.tar.gz

2.)建立連結到 kernel source

cd /lib/modules/4.14.98-v7
ln -sf  /root/linux-rpi-4.14.98-v7 build




------------------------------------------------------------------------------------
3.) build  driver module from source

cd kernel_driver/01_LED 
.
├── chr_led.c
├── Makefile
└── test.c

make 


├── chr_led.c
├── chr_led.ko
├── chr_led.mod.c
├── chr_led.mod.o
├── chr_led.o
├── Makefile
├── modules.order
├── Module.symvers
└── test.c

發生 fixdep error! Exec format error

進入kernel source 重新產生ARM版本的工具集

cd /root/linux-rpi-4.14.98-v7
make scripts 







4.)   測試 module

#載入模組sudo insmod chr_led.ko

#顯示所有模組
lsmod




#用user應用程式測試driver
gcc test.c -o test

sudo ./test   ==> 你會看見LED 在閃礫

#卸載模組
rmmod chr_led







2019年9月6日 星期五

常用數學符號的 LaTeX 表示方法


在jupyter notebook 插入LaTeX數學公式, 前後要包 $$..............$$


## Euclidean and Cosine distance
Euclidean:  $$d(x,y)=\sqrt{\sum^n_{i=1}(x_i - y_i)^2}$$

Cosine:  $$\theta(x,y)=\frac{x \bullet y}{ \sqrt{x \bullet x} \sqrt{y \bullet y}}$$


常用數學符號的 LaTeX 表示方法
http://mohu.org/info/symbols/symbols.htm

Online LaTeX Equation Editor - create, integrate and download
https://latex.codecogs.com/eqneditor/editor.php
About LaTeX 
很多論文及科學文章都會用到LaTeX。它是一個公式編輯系統,使用簡單的指令構建出專業的數學公式。


Markdown Cell內容




輸出結果




如果公式不要換行,則只要使用一個$去包,Letex

$\alpha$ 愈小等同於Linear Regression

在Jupyter Notebook 輸出會像這樣



2019年8月16日 星期五

Raspberry Pi Mail Box--tag buffer


Raspberry Pi Mailbox的機制是你CPU 送出Request所用的buffer , 在GPU Response 回來時是會被修改的.因為使用的是同一塊Buffer, 所以Request傳送的資料佔了幾個byte (bit 30:0 Value Length)及 Response回來有多少個byte ,在送出Request就要決定了
 value buffer 的大小一定是max(Request data length, Response data length)




value buffer size in bytes 是指value buffer的大小;
  value length in bytes 是請求欄位佔幾個Byte



ARM Bare metal 開發課程連結