Zedboard の Linux 構築 手順と ALI3 モニタードライバの変更更

TIOS
www.tios.cc
Zedboard の Linux 構築⼿手順と ALI3 モニタードライバの変更更 本書は、AVNET 製 Zedboard の Linux 構築⼿手順と、ALI3 モニタードライバの変更更内容について記載してい
ます。 ⽬目次 1 開発環境の作成 ................................................................................................................................................ 2
1.1 ツールチェイン⽤用インストーラのダウンロード ...................................................................................... 2
1.2 インストール ............................................................................................................................................ 2
1.3 環境変数の設定 ......................................................................................................................................... 9
2 カーネルの作成 .............................................................................................................................................. 10
2.1 カーネル・コードのコピー ..................................................................................................................... 10
2.2 ビルド準備 .............................................................................................................................................. 10
2.3 ディスプレィドライバ(パッチ)のコピー ........................................................................................... 10
2.4 パッチの適⽤用 .......................................................................................................................................... 10
2.5 ビルド ..................................................................................................................................................... 10
2.6 カーネルを SD にコピー ......................................................................................................................... 10
3 SD カードの作成 ........................................................................................................................................... 11
4 ファイルシステムのインストール ................................................................................................................. 17
5 ALI3 ドライバ ............................................................................................................................................... 18
5.1 PROC ファイルシステム .......................................................................................................................... 18
5.2 ソース .................................................................................................................................................... 20
5.3 MAKE ........................................................................................................................................................ 23
参考 ................................................................................................................................................................... 24
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
1/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
1 開発環境の作成 1.1 ツールチェイン⽤用インストーラのダウンロード 下記より、インストーラをダウンロードします。 http://code.google.com/p/zedboard-‐‑‒book-‐‑‒source/downloads/detail?name=xilinx-‐‑‒2011.09-‐‑‒50-‐‑‒arm-‐‑‒
xilinx-‐‑‒linux-‐‑‒gnueabi.bin&can=2&q= 1.2 インストール bash> ./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
2/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
3/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
4/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
5/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
6/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
7/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
8/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
1.3 環境変数の設定 bash> export PATH=/path/to/cross/compiler/bin:$PATH
bash> export CROSS_COMPILE=arm-xilinx-linux-gnueabibash> export CC= arm-xilinx-linux-gnueabi-gcc
bash> export CXX= arm-xilinx-linux-gnueabi-g++
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
9/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
2 カーネルの作成 2.1 カーネル・コードのコピー bash> git clone https://github.com/Xilinx/linux-xlnx.git
2.2 ビルド準備 bash> cd linux-xlnx
bash> git checkout -b xilinx-v14.4 xilinx-v14.4
bash> make ARCH=arm distclean
2.3 ディスプレィドライバ(パッチ)のコピー bash>cp ~/ZedBoard_ALI3_Display_Ubuntu_Tutorial_14_4_02/sw/zeddispkit_14.4.patch
~/linux-xlnx
2.4 パッチの適⽤用 bash> git apply --stat zeddispkit_14_4.patch
bash> git apply --check zeddispkit_14_4.patch
bash> git am zeddispkit_14_4.patch
2.5 ビルド bash> make ARCH=arm zynq_zed_dispkit_defconfig
bash> make ARCH=arm uImage
ビルドが正常に終了了すれば、以下のカーネルイメージが作成されます。 ~∼/linux-‐‑‒xlnx/arch/arm/boot/uImage 2.6 カーネルを SD にコピー 作成されたカーネルイメージを SD カードのブーツパーティションにコピーします。 ※ SD カードの作成⽅方法は次項を参照して下さい。 25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
10/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
3 SD カードの作成 SD カードの作成(メンテナンス)は ubuntu のユーティリティ、“gparted”を使⽤用します。 bash> gparted
SD カードデバイスを選択 既存のパーティションが存在するかもしれません。 25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
11/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
既存のパーティションをアンマウントします。 パーティションを削除します。 25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
12/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
全ての操作を可能にします。 以下の確認⽤用画⾯面が表⽰示されます。 25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
13/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
新しいパーティションを作成します。 ブーツ・パーティションを fat32 で作成します。 25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
14/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
更更にパーティションを作成します。 最初の作成したブーツ・パーティション以外を全て rootfs として ext4 で作成します。 25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
15/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
再度度、全ての操作を可能にします。 以下の確認⽤用画⾯面が表⽰示されます。 25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
16/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
4 ファイルシステムのインストール bash> wget http://releases.linaro.org/12.11/ubuntu/¥
precise-images/ubuntu-desktop/linaro-precise-ubuntu-desktop-20121124-560.tar.gz
bash> sudo tar --strip-components=3 -C /media/rootfs/ -zxpf ¥
linaro-precise-ubuntu-desktop-20121124-560.tar.gz
bash> sync
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
17/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
5 ALI3 ドライバ 5.1 proc ファイルシステム ALI3 ドライバは proc ファイルシステムをサポートするように修正しています。 Proc ファイルシステムはドライバを実⾏行行中に、ドライバ内の情報を参照/更更新するための仕組みです。 現在は ALI3 ドライバ内の VDMA のレジスタを参照/更更新するための proc ファイルを作成しています。 以下に proc ファイルのパスを⽰示します。 /proc/zeddispkit/vdma VDMA のレジスタを参照するには以下の cat コマンドを実⾏行行します。 bash> cat /proc/zeddispkit/vdma
各レジスタの値が表⽰示されます。 25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
18/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
VDMA のレジスタを更更新するには以下の echo コマンドを実⾏行行します。 bash> echo 0x28 0x4 > /proc/zeddispkit/vdma
①
②
①:レジスタアドレス ②:値 25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
19/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
5.2 ソース 以下にソースの保存場所を⽰示します。 linux-xlnx
drivers
gpu
drm
zeddispkit
zeddispkit_drm_drv.c
zeddispkit_drm_drv.h
以下の修正箇所を⽰示します。 zeddispkit_̲drm_̲drv.c: … //from line 50
struct vdma_register_t{
char name[255];
long addr;
long val;
};
static struct vdma_register_t vdmaReg[]= {
{.name = "PARK_PTR_REG",.addr=PARK_PTR_REG,.val = 0,},
{.name = "FRMPTR_STS",.addr=FRMPTR_STS,.val = 0,},
{.name = "VDMA_VERSION",.addr=VDMA_VERSION,.val = 0,},
{.name = "S2MM_VDMACR",.addr=S2MM_VDMACR,.val = 0,},
{.name = "S2MM_VDMASR",.addr=S2MM_VDMASR,.val = 0,},
{.name = "S2MM_REG_INDEX",.addr=S2MM_REG_INDEX,.val = 0,},
{.name = "S2MM_FRMSTORE",.addr=S2MM_FRMSTORE,.val = 0,},
{.name = "S2MM_THRESHOLD",.addr=S2MM_THRESHOLD,.val = 0,},
{.name = "S2MM_VSIZE",.addr=S2MM_VSIZE,.val = 0,},
{.name = "S2MM_HSIZE",.addr=S2MM_HSIZE,.val = 0,},
{.name = "S2MM_FRMDLY_STRIDE",.addr=S2MM_FRMDLY_STRIDE,.val = 0,},
{.name = "S2MM_START_ADDRESS1",.addr=S2MM_START_ADDRESS1,.val = 0,},
{.name = "S2MM_START_ADDRESS2",.addr=S2MM_START_ADDRESS1+(1*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS3",.addr=S2MM_START_ADDRESS1+(2*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS4",.addr=S2MM_START_ADDRESS1+(3*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS5",.addr=S2MM_START_ADDRESS1+(4*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS6",.addr=S2MM_START_ADDRESS1+(5*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS7",.addr=S2MM_START_ADDRESS1+(6*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS8",.addr=S2MM_START_ADDRESS1+(7*0x4),.val = 0,},
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
20/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
{.name = "S2MM_START_ADDRESS9",.addr=S2MM_START_ADDRESS1+(8*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS10",.addr=S2MM_START_ADDRESS1+(9*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS11",.addr=S2MM_START_ADDRESS1+(10*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS12",.addr=S2MM_START_ADDRESS1+(11*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS13",.addr=S2MM_START_ADDRESS1+(12*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS14",.addr=S2MM_START_ADDRESS1+(13*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS15",.addr=S2MM_START_ADDRESS1+(14*0x4),.val = 0,},
{.name = "S2MM_START_ADDRESS16",.addr=S2MM_START_ADDRESS1+(15*0x4),.val = 0,},
};
static struct proc_dir_entry *zedkit_dir, *vdma_file;
void __iomem *vdma_mem;
static int proc_read_vdma(char *page, char **start, off_t off, int count, int *eof, void *data)
{
int len = 0,total_len = 0;
int i = 0;
for (i = 0 ; i < ARRAY_SIZE(vdmaReg);i++){
len= sprintf(page+total_len,
"%20s¥t0x%04lx¥t0x%04lx¥n",vdmaReg[i].name,vdmaReg[i].addr,register_read(vdma_mem,vdmaReg[i]
.addr));
total_len+=len;
}
return total_len;
}
static int proc_write_vdma(struct file *file,const char *buffer,unsigned long count,
void *data)
{
char tmp[32];
u32 addr, val;
if (count < 2) {
return -EFAULT;
}
if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
int num = sscanf(tmp, "%x %x", &addr, &val);
if (num != 2) {
DBG("invalid write_reg parameter!¥n");
return count;
}
DBG("addr= 0x%04lx,val = 0x%08lx¥n",addr,val);
register_write(vdma_mem,addr,val);
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
21/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
}
return count;
}
static int zeddispkit_drm_platform_probe(struct platform_device *pdev)
{
….
zedkit_dir = proc_mkdir(MODULE_NAME, NULL);
if (zedkit_dir == NULL) {
rv = -ENOMEM;
goto no_proc_module;
}
vdma_file = create_proc_entry(VDMA_FILE, 0666, zedkit_dir);
if (vdma_file == NULL) {
rv = -ENOMEM;
goto no_vdma;
}
vdma_file->read_proc = proc_read_vdma;
vdma_file->write_proc = proc_write_vdma;
vdma_mem = ioremap(VDMA_BASE, VDMA_SIZE);
…
no_vdma:
remove_proc_entry(VDMA_FILE, zedkit_dir);
no_proc_module:
remove_proc_entry(MODULE_NAME, NULL);
return rv;
}
static int zeddispkit_drm_platform_remove(struct platform_device *pdev)
{
…
…
remove_proc_entry(VDMA_FILE, zedkit_dir);
remove_proc_entry(MODULE_NAME, NULL);
iounmap(vdma_mem);
…
…
}
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
22/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
zeddispkit_̲drm_̲drv.h: … //from line 8
#define VDMA_FILE "vdma"
#define MODULE_NAME "zeddispkit"
#define VDMA_BASE (0x43000000)
#define VDMA_SIZE (0x1000)
#define PARK_PTR_REG (0x28)// MM2Sand S2MM Park Pointer Register
#define FRMPTR_STS (0x24) //MM2S and S2MM Current Frame Pointer Status
#define VDMA_VERSION
(0x2C)//Video DMA Version Register
#define S2MM_VDMACR (0x30) //S2MM VDMA Control Register
#define S2MM_VDMASR (0x34) //S2MM VDMA Status Register
#define S2MM_REG_INDEX (0x44)// S2MM Register Index
#define S2MM_FRMSTORE (0x48) //S2MM Frame Store Register
#define S2MM_THRESHOLD (0x4C)//
S2MM Line Buffer Threshold Register
#define S2MM_VSIZE (0xA0)// S2MM Vertical Size Register
#define S2MM_HSIZE (0xA4) //S2MM Horizontal Size Register
#define S2MM_FRMDLY_STRIDE (0xA8) // S2MM Frame Delay and Stride Register
#define S2MM_START_ADDRESS1 (0xAC)
#define register_read(base, reg) __raw_readl((u32)(base) + (u32)(reg))
#define register_write(base, reg, val) __raw_writel((val), (u32)(base) + (u32)(reg))
5.3 make ドライバを修正した場合、再度度 make を実⾏行行します。 bash>cd ~/linux-xilinx
bash>make ARCH=arm uImage
25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
23/24
THDT1508001-A
Aug 13, 2015
TIOS
www.tios.cc
参考 ZedBoard_̲ALI3_̲Display_̲Ubuntu_̲Tutorial_̲14_̲4_̲02.pdf Build uboot (6 ⾴頁 – 15 ⾴頁) boot.bin (40 ⾴頁– 46 ⾴頁) device tree (58 ⾴頁– 67 ⾴頁) 25/71 Nguyen Binh Khiem, Dist1, Ho Chi Minh City
TEL: +84 (0)83 827 7454
FAX: +84 (0)83 827 7455
24/24
THDT1508001-A
Aug 13, 2015