1
我是新的ZedBoard。我的ZedBoard在Xilinx Linux 2015.4上運行(devicetree.dtb,boot.bin和uImage手動編譯;其他文件來自帶預編譯系統的原始存檔)。 我只用PS,AXI GPIO和LED創建非常簡單的FPGA配置。在Vivado地址,我可以看到這一行:內核驅動 - ZedBoard - Linux訪問地址後掛起
Cell Slave Interface Base name Offset addr. Range High addr.
axi_gpio_0 S_AXI Reg 0x4120_0000 64K 0x4120_FFFF
我想創建此FPGA配置自己的內核驅動程序,但是當我嘗試插入驅動程序到系統中,Linux的ioread/iowrite操作開始時掛起。 有關於初始化函數代碼:
#define DEV_NAME "my_led_dev"
dev_t dev_numbers;
struct cdev *my_led_cdev;
static unsigned long gpio_base = 0x41200000;
struct resource *res;
static int led_init(void) {
void* kernel_gpio_base;
/* Device registration */
int state;
if ((state = alloc_chrdev_region(&dev_numbers, 0, 1, DEV_NAME)) != 0)
printk(KERN_ALERT "failed to register a region dynamically\n");
else
printk(KERN_ALERT "major number = %d\n", MAJOR(dev_numbers));
my_led_cdev = cdev_alloc();
my_led_cdev->owner = THIS_MODULE;
state = cdev_add(my_led_cdev, dev_numbers, 1);
if(state < 0) {
printk(KERN_ALERT "device failed to be added\n");
unregister_chrdev_region(dev_numbers, 1);
return -ENODEV;
}
printk (KERN_INFO "Device prepared\n");
/* Get required resources. */
res = request_mem_region(gpio_base, 0xFFFF, "my_gpio_led");
if (res == NULL) {
printk(KERN_ALERT "my_gpio: can't get I/O port address 0x%lx\n", gpio_base);
return -ENODEV;
}
/* Port mapping */
kernel_gpio_base = (void*) ioremap(gpio_base, 0xFFFF);
if (kernel_gpio_base == NULL) {
printk(KERN_ALERT "kernel remap my_gpio failed 0x%lx\n", gpio_base);
release_mem_region (res->start, 65536);
cdev_del(my_led_cdev);
unregister_chrdev_region(dev_numbers, 1);
return -ENODEV;
}
printk (KERN_INFO "Ports mapped\n");
printk (KERN_INFO "Mapped port: %p", kernel_gpio_base);
printk (KERN_INFO "Actual value: %d\n", ioread32 (kernel_gpio_base)); // There is problem. This message isn't printed and system hangs.
iowrite8 (0xff, kernel_gpio_base);
return 0;
}
我看到賽靈思和ZedBoard文檔,但沒有結果。在Xilinx上插入模塊後,我發現幾個關於掛起的主題,但問題出在fclk-enable被禁用的設備樹上。實際上我使用默認的DT而沒有改變,並且fclk-enable的值爲< 0xf>。
我感謝您的幫助。提前致謝。
感謝您的回覆。其實,我知道這個問題在ps7_post_config中。我在JTAG上工作,並且我的模塊不使用Xilinx SDK,因此可以啓用此選項,因此我正在尋找如何在Vivado中通過比特流(bitstream option?)提供此選項的方法或其他可行的方法。 – JARDA001
我們也可能看到過這個問題。我們也不使用Xilinx SDK。我們通常通過/ dev/xdevcfg而不是JTAG對Zynq進行編程。 –
正在搜索ps7_post_config,我找到了一個包含一些處理器寄存器的XML文件來更新。我認爲在編程邏輯之後,xdevcfg驅動程序可能更具指導性,以確定哪些寄存器需要更新:https://github.com/Xilinx/linux-xlnx/blob/master/drivers/char/xilinx_devcfg.c –