ok6410 uboot os 文件系統 流水燈

飛凌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

編譯uboot

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

編譯文件系統 yaffs2

tar zxvf fileSystem.yaffs2.tar.gz            //獲得 FileSystem_Yaffs2
chmod 7777 mkyaffs2     
./mkyaffs2 FileSystem_Yaffs2 rootfs.yaffs2   //獲得文件系統

好了,如今就能夠把上面三個文件下載到開發板,而後上電運行。code

介紹 LED應用例子

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                          //運行流水燈
相關文章
相關標籤/搜索