tag 标签: ok6410

相关博文
  • 热度 13
    2015-8-9 20:48
    1013 次阅读|
    0 个评论
    【玩玩飞凌OK6410-B】序列之13:QT和屏幕校准测试 ************************************************************************           转载请注明: 版权所有!否则后果自负,谢谢合作!!           淘宝:http://shop109429489.taobao.com/?spm=a1z10.1-c.0.0.pt2dA1 ************************************************************************        本节我们主要是从下面4个方面进行讲解:              1.准备工作        2.通过DNW查看启动信息              3.测试QT              4.测试屏幕校准 ************************************************************************ 一、 准备工作 1.电脑一台; 2.飞凌嵌入式OK6410-B开发板一套; 3.电源线一根; 4.串口线一根; 5.Min-USB线一根; 6.4.3寸液晶显示屏一块; 7.虚拟机软件; 8.Ubuntu系统; 9.S3C6410中文手册一份; 10.ADS1.2软件 11.DNW软件; 12.触摸笔一根。 ************************************************************************ 二、 通过DNW查看启动信息 1、在系统光盘里面找到DNW软件。如下图所示: 2、双击打开DNW软件。如下图所示: 3.配置DNW。如下图所示: 4.开机查看DNW上显示的内容。如下图所示: 已经开始进入linux系统了。 ************************************************************************ 三、 测试QT QT之间的切换。开发板linux系统烧写好之后,默认启动Qtopia2.2.0。在开发终端里,切换各种QT界面。如下图所示: 切换 Qtopia2.2.0: 切换 QT/E-4.7.1 : 四、 测试屏幕校准 每次重新烧写根文件系统之后,启动系统,会看到tslib 的校准画面。如下图所示: 校准方法:使用触笔依次点击屏幕中 的正中央。一共点击五次,每次触摸的点会不一样,五点点击完毕后,teslib 会在根目录系统 /etc 中生成 pointercal 文件。 Pointercal 是校准信息文件。 重新校准的方法:将文件删除后重启开发板会自动进入 teslib 校准程序,命令如下: #rm/etc/pintercal    (删除校准文件) #reboot            (重新启动开发板) 具体操作如下图所示: 这样系统就重启了。然后就是按照上面所说的进行校准即可。 ************************************************************************
  • 热度 17
    2012-10-9 15:38
    2636 次阅读|
    0 个评论
    1 eth0和lo不能同时使用,需要关闭 eth0 ,lo 节点,使用ifconfig eth0 down ,ifconfig  lo  down. 然后 ifconfig wlan0 up  ,继续 iwconfig scanning 扫描无线网络. 2 设置ESSID和Key可以同一行:  iwconfig wlan0 essid "XXXXXX"   key "YYYYYYYY" 3 以上步骤完成后 设置IP地址 : ifconfig wlan0   XXX.XXX.XXX.XXX 4  如果能ping 通同一网段内的其他IP,但是不能上网,请使用: route add default gw  XXX.XXX.XXX.XXX  命令添加网关,网关设置完后就可以上网了。 当然如果无线路由支持DHCP自动分配IP地址,就不需要自己设置IP,和网关了,使用udhcpc  -i wlan0 即可自动分配。
  • 热度 22
    2012-4-22 22:10
    3062 次阅读|
    0 个评论
    今天编译了一下飞凌的OK6410的uboot和linux内核。发现飞凌的用户手册讲得不够详细。只按着他的步骤走会出现找不到gcc的问题。后来在网上搜了一下,发现是路径的问题。最后进行了如下设置: 1、使用gedit 命令编辑://etc/bash.bashrc。在文件结尾增加:       export PATH=$PATH:/usr/local/arm/4.3.2/bin       export PATH 2、重新编译可以通过了。 最后,抱怨一下飞凌: 1、用户手册更新不够。基本上它官网上有好多与我一样问题的用户。 2、提供的资料不过新。ubuntu9好像已经不支持了。导致我重新安装了一下ubuntu11。 3、反正按着他提供的用户手册很有可能会出问题。还得上网上去找答案。 另,附上《 VMware下Ubuntu与宿主机XP共享文件 》链接。写得挺详细,我也不再废话,地址: http://www.cppblog.com/life02/archive/2012/01/06/163751.aspx
  • 热度 22
    2012-4-8 11:02
    4495 次阅读|
    0 个评论
    这里本人使用中断形式实现按键的驱动,首先还是先呈上源程序: #include linux/kernel.h #include linux/module.h #include linux/init.h #include linux/fs.h #include linux/gpio.h #include linux/types.h #include linux/cdev.h #include linux/interrupt.h #include linux/sched.h #include linux/device.h #include linux/poll.h #include linux/semaphore.h #include linux/timer.h #include asm/irq.h #include asm/uaccess.h //#include mach/hardware.h #include mach/irqs.h #define DEVICE_NAME "keyint" #define KEYNUM 6 dev_t devid; static DEFINE_SEMAPHORE(key_lock);  //declare a mutex lock for keyint static struct fasync_struct *key_async; static struct timer_list key_timer; struct key_irq_desc {     int irq;        //irq num     unsigned long flags;    //irq flags,identified the way of irq here,eq.edge,level     char *name;        //irq name }; static struct key_irq_desc key_irqs = {0,0,0,0,0,0}; static irqreturn_t keys_interrupt(int irq, void *dev_id) {     volatile int *press_cnt = (volatile int *) dev_id;        /*set the pressed key flag(must do here due to not be static value)*/     *press_cnt = *press_cnt + 1;     mod_timer(key_timer,jiffies+HZ/100);        //start timer after 10ms     return IRQ_RETVAL(IRQ_HANDLED); } static void key_timer_func(unsigned long data) {              ev_press = 1;     wake_up_interruptible(key_waitq);     kill_fasync(key_async, SIGIO, POLL_IN); } static int key_fasync(int fd, struct file *filp, int on) {     printk("Function key_fasync\n");     return fasync_helper(fd,filp,on,key_async); } static unsigned key_poll(struct file *file, poll_table *wait) {     unsigned int mask=0;     poll_wait(file,key_waitq,wait);     if(ev_press)     mask |= POLL_IN | POLLRDNORM;     printk("poll wait\n");     return mask; } static int key_open(struct inode *inode, struct file *file) {     int num;     if(file-f_flags O_NONBLOCK) {       if(down_trylock(key_lock)) return -EBUSY;     }     else {       down(key_lock);     }          for(num=0;numKEYNUM;num++) {       request_irq(key_irqs .irq, keys_interrupt, key_irqs .flags, key_irqs .name, (void *)press_cnt );     }     return 0; } static int key_close(struct inode *inode, struct file *file) {     int num;     for(num=0;num6;num++) {       free_irq(key_irqs .irq, (void *)press_cnt );     }     up(key_lock);     printk("key_close free irqs\n");     return 0; } static int key_read(struct file *filp, char __user *buff, size_t count, loff_t *offp) { //    unsigned int err;          if(filp-f_flags O_NONBLOCK) {       if(!ev_press)  return -EAGAIN;     }     else {       /*if ev_press==0,then sleep*/       wait_event_interruptible(key_waitq,ev_press);     }     ev_press = 0;     copy_to_user(buff,(const void *)press_cnt,min(sizeof(press_cnt),count));     memset((void *)press_cnt,0,sizeof(press_cnt)); //    printk("read and clean press_cnt\n");     return 1; } static struct file_operations key_ops = {     .owner     = THIS_MODULE,     .open     = key_open,     .release = key_close,     .read     = key_read,     .poll     = key_poll,     .fasync     = key_fasync, }; static struct cdev *cdev_keyint; static struct class *keyint_class; static int __init s3c6410_keyint_init(void) {     int val;          /*timer initial */     init_timer(key_timer);     key_timer.function = key_timer_func;     add_timer(key_timer);     /*register device*/     val = alloc_chrdev_region(devid,0,1,DEVICE_NAME);     if(val) {       return -1;       printk("register keyint error\n");     }     cdev_keyint = cdev_alloc();     cdev_init(cdev_keyint, key_ops);     cdev_keyint-owner = THIS_MODULE;     cdev_keyint-ops   = key_ops;          val = cdev_add(cdev_keyint,devid,1);     if(val) {       return -1;       printk("add device error\n");     }     keyint_class = class_create(THIS_MODULE,DEVICE_NAME);     device_create(keyint_class,NULL,devid,NULL,"%s",DEVICE_NAME);          printk("KEY initialezed ^_^\n");     return 0; } static void __exit s3c6410_keyint_exit(void) {      cdev_del(cdev_keyint);     device_destroy(keyint_class,devid);     class_destroy(keyint_class);     unregister_chrdev_region(devid,1); } module_init(s3c6410_keyint_init); module_exit(s3c6410_keyint_exit); MODULE_LICENSE("GPL"); 下面贴上测试程序^_^: #include stdio.h #include stdlib.h #include unistd.h #include sys/ioctl.h int main(int argc, char **argv) {     int fd;     int val;     int i;     int press_cnt ;     fd = open("/dev/keyint",0);     if(fd0) {       printf("open devie error\n");       return -1;     }     while(1) {       val = read(fd,press_cnt, sizeof(press_cnt));       if(val0) {         printf("read error\n");         continue;       }       for(i=0;i6;i++) {          if(press_cnt )          printf("KEY%d pressed\n",(i+1),press_cnt );                }              }     close(fd);     return 0; } 将测试程序编译后放到目标板上执行,可以看到哪个键按下时候会显示到终端。 本着互利互惠,共同分享的原则,依然奉献到底,贴上makefile: 执行程序makefile: CROSS_COMPILE=/usr/local/arm/4.2.2-eabi/usr/bin/arm-unknown-linux-gnueabi- keyint_test : keyint_test.c     $(CROSS_COMPILE)gcc $^ -o $@ clean:     rm -rf *~ 模块编译makefile: KDIR = /home/xu/Documents/linux-3.0.24 PWD  = $(shell pwd) obj-m += keyint.o default:     $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean:     rm -rf *.o *~ *.mod.o *.mod.c 以上就是简单的按键驱动了,在记录自己的点滴的同时也希望能给比我更为初学的人(no offense/并无恶意 )以帮助。    
  • 热度 22
    2012-4-2 15:55
    5228 次阅读|
    2 个评论
    开始自己的嵌入式之旅了。一切神秘的面纱均可以由闪亮的LED揭开。 贴上自己的驱动程序: #includelinux/kernel.h #includelinux/module.h #includelinux/init.h #includelinux/fs.h #includelinux/pci.h #includelinux/ioctl.h #includelinux/types.h #includelinux/cdev.h #includelinux/device.h #includelinux/gpio.h #includemach/hardware.h #includemach/regs-gpio.h #includeplat/gpio-cfg.h #include mach/map.h #define DEVICE_NAME "s3c6410leds" #define LED_ON 1 #define LED_OFF 0 dev_t devid; static int leds_open(struct inode *inode , struct file *file) {   unsigned tmp;   for(tmp=0;tmp4;tmp++)   s3c_gpio_cfgpin(S3C64XX_GPM(tmp),S3C_GPIO_SFN(1));     return 0; } static long leds_ioctl( struct file *filp,unsigned int cmd,                         unsigned long arg)                        {   if(arg4) return -EINVAL;   //tmp = __raw_readl(S3C64XX_GPMDAT);   switch(cmd)   {     case LED_ON:  //tmp = ~(1                   gpio_set_value(S3C64XX_GPM(arg),0);                   return 0;     case LED_OFF: //tmp |= 1                   gpio_set_value(S3C64XX_GPM(arg),1);                   return 0;     default: return -EINVAL;   } } static struct file_operations leds_ops = {     .owner = THIS_MODULE,     .open = leds_open,     .unlocked_ioctl = leds_ioctl, }; static struct cdev *cdev_led; static struct class *led_class; static int __init s3c6410_leds_init(void) {   int val;   unsigned tmp;     tmp = readl(S3C64XX_GPMPUD); //pull up gpiom0~3   tmp = ~(0xffff);   tmp |= 0xaa;   writel(tmp,S3C64XX_GPMPUD); //  devid = MKDEV(LED_MAJOR,0); //  val = register_chrdev_region(devid,1,DEVICE_NAME);   val = alloc_chrdev_region(devid,0,1,DEVICE_NAME);   if(val) return -1;   cdev_led = cdev_alloc();   cdev_init(cdev_led,leds_ops);   val = cdev_add(cdev_led,devid,1);   if(val)   {  //   printk(KERN_INFO "Add device led error!\n");     return -1;   }     led_class = class_create(THIS_MODULE,DEVICE_NAME);   device_create(led_class,NULL,devid,NULL,"%s",DEVICE_NAME);  // printk(KERN_INFO "LED Initilized I'm in! ^_^ \n");   return 0; } static void __exit s3c6410_leds_exit(void) {   cdev_del(cdev_led);   device_destroy(led_class,devid);   class_destroy(led_class);     unregister_chrdev_region(devid, 1); } module_init(s3c6410_leds_init); module_exit(s3c6410_leds_exit);   MODULE_AUTHOR("embedded lover"); MODULE_DESCRIPTION("s3c6410 led test"); MODULE_LICENSE("GPL");;); 在linux2.6版本之后我们是可以让驱动程序自动建立设备节点文件的,注意下这点。 下面是自己的测试程序: #include #include #include #include #define LED_ON 1 #define LED_OFF 0 int main(int argc, char **argv) {   int fd = -1;   unsigned int led_no;     fd = open("/dev/s3c6410leds",0);   if(fd0)   {     printf("Can not open device leds\n");     return -1;   }     led_no = strtoul(argv ,0,0) - 1;   if(!strcmp(argv ,"on"))   {     ioctl(fd,LED_ON,led_no);   }   else if(!strcmp(argv ,"off"))   {     ioctl(fd,LED_OFF,led_no);   }     else goto err;   close(fd);   return 0;   err:   if(fd0) close(fd);   return -1; } 在写完驱动程序后有两个方法可以编译成可加载的.ko模块文件,一个是将驱动放到内核原码的driver/char目录下,再在Makefile下新增一个obj-m += name.o。再在顶层文件夹下执行make modules ,然后就可以在driver/char下找到对应的.ko文件。另外一个方法就是自己写makefile了,这样也方便。事实上无论哪种方法最终的目的其实都是要进入到内核目录下使用他的Makefie编译相关的东西。 Makefile如下: --------------------------------------------- KDIR = /home/xu/Documents/linux-3.0.1 PWD = $(shell pwd) obj-m := led6410.o default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -rf *.o *~ *.mod.o 最后将模块文件加载到目标板上:insmod,移除模块用:rmmod。  
相关资源
  • 所需E币: 1
    时间: 2023-4-12 17:09
    大小: 9.6MB
    上传者: 大懒猫
    适用于飞凌嵌入式公司的OK6410,FL6410,TE6410开发板的Android应用程序开发。
  • 所需E币: 3
    时间: 2019-12-25 02:43
    大小: 9.87MB
    上传者: 2iot
    OK6410OK-6410OK-6410WICNE6.0改vnfg用户手册version1.16410OK6410WINCE6.0使用手册OK飞凌嵌入式致力于打造一流的嵌入式开发平台飞凌嵌入式www.witech.com.cn2010.5.61OK-6410OK-6410WICNE6.0改vnfg用户手册……
  • 所需E币: 4
    时间: 2019-12-25 02:44
    大小: 15.54MB
    上传者: quw431979_163.com
    OK64106410OK6410LINUX使用手册OK飞凌嵌入式致力于打造一流的嵌入式开发平台0OK-6410OK-6410LINUX2.6.28改vnfg用户手册version1.0目录第一章前言......................................................................................................................................................4第二章在主机上搭建LINUX开发环境..............................……
  • 所需E币: 4
    时间: 2019-12-25 02:44
    大小: 1.42MB
    上传者: quw431979_163.com
    OK6410飞凌嵌入式OK6410开发板硬件手册-1-一一OK6410开发板简介随着微电子技术的快速发展,ARM处理器经历了包括ARM7、ARM9在内的多个发展历程,而ARM11的成熟应用必将为嵌入式的发展带来新的活力,使更高端的产品应用成为可能。与ARM9的5级流水线相比,ARM11拥有一条具有独立的load-store和算术流水的8级流水线,在同样工艺下,ARM11处理器的性能与ARM9相比大约提高了40%。ARM11执行ARMv6架构的指令,ARMv6指令包含了针对媒体处理的单指令流多数据流(SIMD)扩展,采用特殊的设计,以改善视频处理性能。为了能够进行快速浮点运算,ARM11增加了向量浮点单元。所有这些结构上的提高,都是ARM9处理器不可比拟的。ARM11为便携式和无线应用,提供了从未有过的高超性能,并且使我们主要关心的成本和功耗减到最小。ARM11的微架构保证了系统性能可以从基本的350-500MHz范围扩展到最终的1GHz以上。其微架构的高效率表现,允许开发者根据不同的应用来调节时钟频率和电源电压,从而在性能和功耗之间达到最佳的折衷。例如,一个基于ARM11的微架构的处理器在1.2V工作电压下,使用0.13um工艺实现,其功率将不会超过0.4mW/MHz。ARM11微处理器是一种高性能、低功耗的‘准64位’微处理器!对于目前大多数嵌入式应用,一个真正的64位处理器仍然被认为是不必要的,其巨大的功耗和面积让人难以接受。对此,ARM11选择了一个折中的方案,以较小的代价,部分实现了一个64位微架构。ARM11只在处理器整数单位和高速缓存之间,以及在整数单位和协处理器之间实现了64位数据总线。这些64位数据道路允许处理器在一个时钟周期中同时获取两条指令,还允许在……
  • 所需E币: 3
    时间: 2019-12-25 02:38
    大小: 124.21KB
    上传者: 16245458_qq.com
    OK6410原理图OK6410ExpansionBoardSchematicDiagramRevisionDateDescriptionRev1.02010.03.16TableofContentsPageFunction01RevisionHistory02SD&SD_WIFI03CON&USER&BATTER04POWERCOMPANY:OK6410ExpansionBoard05COM&JTAG06LED&USB&KEYTITLE:ForlinxEmbedded07AUDIOHOME:www.forlinx.com08CAM&LCD&TV09NETCOMPANY:OK6410ExpansionBoard……
  • 所需E币: 3
    时间: 2019-12-25 02:38
    大小: 38.64KB
    上传者: givh79_163.com
    OK6410原理图……
  • 所需E币: 5
    时间: 2019-12-25 02:38
    大小: 119.87KB
    上传者: 978461154_qq
    OK6410原理图FL6410COREBoardSchematicDiagramRevisionDateDescriptionRev1.02009.12.28TableofContentsPageFunction01RevisionHistory02S3C6410_0103S3C6410_0204S3C6410_03COMPANY:FL6410COREBoard05S3C6410_0406DDR_NANDFLASHTITLE:ForlinxEmbedded07PowerHOME:www.forlinx.com08ConnectorCOMPANY:FL6410COREBoard……
  • 所需E币: 5
    时间: 2019-12-24 10:56
    大小: 9.4MB
    上传者: rdg1993
    ok6410的使用手册很全的OK6410-ALinuLinuxx使用手册OK6410-ALINUX2.6.36用户手册目录第一章前言....................................................................................................................................................5第二章一键烧写LINUX............................................................................................................................62-1对于WinCE系统换Linux系统的特殊说明..................................................................................7……