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
© Copyright 2024 ExpyDoc