ZingSK嵌入式入门设计--Linux_Hello_LED
一、概述
本例程在ZingSK入门设计--Hello_LED基础之上,通过编写Linux下的LED驱动程序,使用户可以在应用层通过Linux系统的标准接口来访问设备,而不用关心寄存器等具体的硬件问题,本篇将介绍ZingSK-Linux下LED驱动的编写及Device Tree的配置。
硬件平台:ZingSK开发套件
开发环境:Windows7-32位、VMware 9.0 + Ubuntu 12.04、arm- xilinx- linux-gnueabi交叉编译环境
嵌入式Linux: zynq_base_trd_14.3(基于ZingSK修改)
LED例程运行需要一系列二进制文件如下表所示:
文件名 描述
BOOT.BIN 由EDK bootgen工具创建,包含 FSBL (First Stage Boot Loader), FPGA bit-stream, U-Boot(基于zynq_base_trd_14.3构建)
uImage Linux kernel(基于zynq_base_trd_14.3内核编译)
devicetree.dtb Device Tree Blob
uramdisk.image.gz 根文件系统
led_driver.ko LED驱动
led-test LED测试程序
表1-1
二、软件设计
1、Device Tree修改部分:
添加led节点:
led: led@65e00000 {
compatible = "zing,led-1.00.a";
reg = < 0x65e00000 0x10000 >;
xlnx,dphase-timeout = <0x8>;
xlnx,family = "zynq";
xlnx,num-mem = <0x1>;
xlnx,num-reg = <0x1>;
xlnx,s-axi-min-size = <0x1ff>;
xlnx,slv-awidth = <0x20>;
xlnx,slv-dwidth = <0x20>;
xlnx,use-wstrb = <0x0>;
} ;
compatible 属性是一个字符串的列表,列表中的第一个字符串表征了结点代表的确切设备,是连接驱动与硬件平台信息的桥梁。
LED驱动是一个简单的字符设备驱动。
代码片段:
驱动probe函数,注册设备:
static int driver_probe(struct platform_device *pdev)
{
int result;
result = led_init(pdev->dev.of_node);
if (result < 0) {
pr_err("%s: error %d\n", __func__, result);
return result;
}
pr_info("led: driver probed!\n");
return 0;
}
物理地址到虚拟地址的映射:
pLED_BASEADDR = of_iomap(np, 0);
if (pLED_BASEADDR == NULL) {
pr_err("of_iomap error!\n");
return -ENOMEM;
}
LED节点中的compatible属性:
static struct of_device_id led_of_match[] __devinitdata = {
{.compatible = "zing,led-1.00.a"},
{ /* end of table */ },
};
应用程序通过ioctl函数对LED进行操作:
#ifdef IOCTL
while(1)
{
if(ioctl(fd, LED_ON, i) < 0)
{
perror("ioctl");
return -1;
}
usleep(200000);
ioctl(fd, LED_OFF,i);
usleep(200000);
i += 1;
if(i > 11)
i = 0;
}
#endif
三、快速启动
在ZingSK上启动LED例程需要一下几步:
· 格式化TF并将表1-1中所有文件拷贝到其中。
· 将TF卡插入ZingSK的TF卡插槽中。
· 确保ZingSK板卡跳线正确设置为TF卡启动模式。
6V电源、USB-UART连接线
以下分步介绍:
开发板连接6 V电源(JP1),不要打开电源。
图 1-1
将包含了LED例程二进制文件的TF闪存卡,插入到Zing SK开发板的TF卡插槽内。
图 1-2
用USB Type-A -USB Mini-B 电缆连接开发板UART与电脑.
图 1-3
使用“设备管理器”,以确定COM端口。 打开一个串口调试程序,配置为115200/8/n/1/n。
图 1-4
图 1-5
打开电源开关(SP1) ,开发板上电运行。
图 1-6
在串口调试工具的窗口将会显示Linux的引导过程。
图 1-7
约半分钟左右,串口调试工具的窗口将会显示zynq>提示符,首先加载LED驱动”insmod /mnt/led_driver.ko”,然后键入”/mnt/led-test”运行LED测试例程。
效果图
|