飛凌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 //運行流水燈