飞凌OK6410 开发板简单教程
linux
cross-4.2.2 -eabi.tar.bz2shell
mkdir /usr/local/arm chmod 777 /usr/local/arm //赋给最大权限 tar jxvf cross-4.2.2 -eabi.tar.bz2
解压获得文件后 cd /usr/local/arm/4.2.2-eabi/usr/binatom
看到编译器所在的目录 进行环境配置 参考http://my.oschina.net/u/274829/blog/181536不然会出现:内核编译出错 arm-linux-gcc: not foundspa
tar zxvf uboot1.1.6.tgz //解压源码 获得uboot1.1.6目录 make clean //清除 原来生产的文件和中间文件,不会删除源码和配置文件(能够运行下) gedit Makefile //找到与开发板匹配的配置选项。如forlinux_nand_ram128.config make forlinux_nand_ram128.config //配置环境 make //获得uboot.bin
tar zxvf linux-3.0.1.tar.gz -C /forlinux (-C 指定解压目录) //解压 cd linux-3.0.1 //到解压文件目录 make zImage -j4 //j4(4为cpu4内核,编译快) zImage(内核影像压缩文件)
内核编译还有别的选择可选,make menuconfig,详细文章见http://my.oschina.net/u/274829/blog/181910.net
tar zxvf fileSystem.yaffs2.tar.gz //获得 FileSystem_Yaffs2 chmod 7777 mkyaffs2 ./mkyaffs2 FileSystem_Yaffs2 rootfs.yaffs2 //获得文件系统
好了,如今就能够把上面三个文件下载到开发板,而后上电运行。code
arm11与普通单片机区别,想控制硬件,用用户程序经过系统调度驱动程序
orm
硬件设备 |
驱动程序 | 系统内核 | 应用程序 |
ok6410 led 驱动代码blog
#include <linux/miscdevice.h> #include <linux/delay.h> #include <asm/irq.h> #include <mach/hardware.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/mm.h> #include <linux/fs.h> #include <linux/types.h> #include <linux/delay.h> #include <linux/moduleparam.h> #include <linux/slab.h> #include <linux/errno.h> #include <linux/ioctl.h> #include <linux/cdev.h> #include <linux/string.h> #include <linux/list.h> #include <linux/pci.h> #include <asm/uaccess.h> #include <asm/atomic.h> #include <asm/unistd.h> #include <mach/map.h> #include <mach/regs-clock.h> #include <mach/regs-gpio.h> #include <plat/gpio-cfg.h> #include <mach/gpio-bank-e.h> #include <mach/gpio-bank-m.h> #define DEVICE_NAME "leds" static long s3c6410_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { switch(cmd) { unsigned tmp; case 0: case 1: if (arg > 4) { return -EINVAL; } tmp = readl(S3C64XX_GPMDAT); if(cmd==0) { tmp &= (~(1<<arg)); } else { tmp |= (1<<arg); } writel(tmp,S3C64XX_GPMDAT); //printk (DEVICE_NAME": %d %d\n", arg, cmd); return 0; default: return -EINVAL; } } static struct file_operations dev_fops = { .owner = THIS_MODULE,//设备全部者 .unlocked_ioctl = s3c6410_leds_ioctl,//须要本身实现 }; static struct miscdevice misc = { .minor = MISC_DYNAMIC_MINOR,//注册设备号 .name = DEVICE_NAME,//注册设备名称 .fops = &dev_fops,//设备操做 }; static int __init dev_init(void) { int ret; unsigned tmp; //gpm0-3 output mode 初始化控制寄存器 tmp =readl(S3C64XX_GPMCON); tmp &= (~0xFFFF); tmp |= 0x1111; writel(tmp,S3C64XX_GPMCON); //gpm0-3 output 0 初始化数据寄存器 tmp = __raw_readl(S3C64XX_GPMDAT); tmp |= 0x10; writel(tmp,S3C64XX_GPMDAT); //注册设备 ret = misc_register(&misc); return ret; } static void __exit dev_exit(void) { misc_deregister(&misc); } module_init(dev_init);//模块的初始化及注册 module_exit(dev_exit);//模块的卸载
LED 应用代码教程
/******************************* led.c *******************************/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/fcntl.h> #define LEDS "/dev/leds" int fd; int main(void) { fd = open("/dev/leds", O_RDWR); if (fd < 0) { perror("Open /dev/leds failed"); exit(1); } int i = 0; while(1) { for(i = 0; i < 4; i++) { ioctl(fd, 0, i); sleep(1); ioctl(fd, 1, i); } } close(fd); return 0; }
将应用代码进行交叉编译 arm-linux-gcc led.c -o ledci
将编译生成的led应用下载到arm开发板
建立一个用户
选择链接的com 口
选择波特率 数据位 8 奇偶校验 无 中止位 1 数据流控制 无
打开后,右键下载文件,文件下载进去以后。
chmod 777 led //更改led应用的权限 ./led //运行流水灯