以下でZyboでフレームバッファを使ってXを動かしている
http://bravo-fpga.blogspot.jp/2016/12/zybo26-linux-simple-frame-buffer-x.html
Simple Framebufferを使う
- Simple framebufferを有効にする
http://se.hatenablog.jp/entry/2014/11/19/081514
fsbl_hooks.c
FsblHookBeforeHandoff()内
{ DisplayCtrl hdmiCtrl; u32 *fPtr[3] = {(u32 *)0x1F000000 , (u32 *)0x1F000000 , (u32 *)0x1F000000}; fsbl_printf(DEBUG_GENERAL,"HDMI display initialization\n\r"); Status = DisplayInitialize(&hdmiCtrl, XPAR_AXIVDMA_1_DEVICE_ID,XPAR_AXI_DISPCTRL_1_S_AXI_BASEADDR, 1, fPtr, (1024*4)); if(Status != XST_SUCCESS){ fsbl_printf(DEBUG_GENERAL,"HDMI display initialization failed\n\r"); return XST_FAILURE; } Status = DisplayStart(&hdmiCtrl); if(Status != XST_SUCCESS){ fsbl_printf(DEBUG_GENERAL,"Could not start display\n\r"); return XST_FAILURE; } }
vga_modes.h内
static const VideoMode VMODE_1024x768 = { .label = "1024x768@60Hz", .width = 1024, .height = 768, .hps = 1048, .hpe = 1184, .hmax = 1344, .hpol = 1, .vps = 771, .vpe = 777, .vmax = 806, .vpol = 1, .freq = 60.0 };
output.bif
//arch = zynq; split = false; format = BIN the_ROM_image: { [bootloader]/home/shohei/Downloads/zybo_base_system_2017.3/source/vivado/hw/zybo_bsd/zybo_bsd.sdk/FSBL/Debug/FSBL.elf /home/shohei/Downloads/zybo_base_system_2017.3/source/vivado/hw/zybo_bsd/zybo_bsd.sdk/system_wrapper_hw_platform_1/system_wrapper.bit /home/shohei/Downloads/zybo_minimal/images/linux/u-boot.elf
bootgenコマンド
bootgen -image output.bif -o i BOOT.bin -w
結局以下の関数XAxiVdma_SetFrmStore()は、demoでも失敗していて、かつ動作しているので、コメントアウトして差し支えないみたい。
Status = XAxiVdma_SetFrmStore(&(dispPtr->vdma), DISPLAY_NUM_FRAMES, XAXIVDMA_READ); if (Status != XST_SUCCESS) { xil_printf("Setting Frame Store Number Failed in Read Channel %d\r\n", Status); return XST_FAILURE; }
起動するも、simplebufferが立ち上がらない。
次のエラーが出る。
simple-framebuffer: probe of 1f000000.fb failed with error -12
drivers/video/fbdev/simplefb.cにprintkを仕込んでみたが、今度はカーネルが起動しなくなった。
以下によると、512MB以下のシステムだとsimple-framebufferドライバが起動時にロードされないバグがあるらしい。Zyboで動かしてる人がいるのに、不思議である。
https://wiki.trenz-electronic.de/display/PD/Debian+Installation
Linux mainstream simple-framebuffer driver has a bug that prevents the driver to install correctly if the total system memory is less than 512MByte. Error -12 would come then during the startup and the driver will not get loaded. There is no simple easy patch known.