arm
文章平均质量分 67
chuncanL
这个作者很懒,什么都没留下…
展开
-
s5pv210 uart完善更新
昨天才SB了 所以弄的挺乱的 这里主要做了一些改进 主要是完善地址表 其他不多说了 直接上代码吧//cpu_io.h 主要负责读取寄存器值#ifndef _S5PV210_CPU_LCQ_H#define _S5PV210_CPU_LCQ_H#define _REG(adr) (*(volatile unsigned int *)(adr))#define readb(原创 2016-08-15 16:53:25 · 369 阅读 · 0 评论 -
linux设备驱动中的阻塞和同步机制
阻塞与非阻塞阻塞调用 阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。非阻塞调用 在不能立即得到结果之前该函数不会阻塞当前线程,而会立刻返回。等待队列 wait queue可以用等待队列实现阻塞进程 等待队列基本数据结构是一个双向链表,这个链表存储睡眠的进程。等待队列也与进程调度机制紧密结合,能够用于实现内核中异步事件通知机制。它有两种数据结构:等待队列头原创 2017-01-25 10:28:28 · 510 阅读 · 0 评论 -
设备驱动中的并发控制 (2)
信号量信号量也是一种保护临界资源的一种方法。信号量与自旋锁的使用方法基本一样。与与自旋锁不同的是,当获取不到信号量时,进程不会原地打转而是进入休眠等待状态。信号量的实现在linux中,信号量的定义如下struct semaphore { spinlock_t lock; unsigned int count; struct list_head wait_list;}成员变量原创 2017-01-25 15:12:26 · 431 阅读 · 0 评论 -
设备驱动中的并发控制 (1)
中断屏蔽在单 CPU 范围内避免竞态的一种简单方法是在进入临界区之前屏蔽系统的中断。CPU 一般都具备屏蔽中断和打开中断的功能,这项功能可以保证正在执行的内核执行路径不被中断处理程序所抢占,防止某些竞态条件的发生。具体而言,中断屏蔽将使得中断与进程之间的并发不再发生,而且,由于 Linux 内核的进程调度等操作都依赖中断来实现,内核抢占进程之间的并发也就得以避免了。 中断屏蔽的使用方法为: loca原创 2017-01-25 11:26:17 · 315 阅读 · 0 评论 -
linux字符设备驱动
linux系统设备的3种类型:字符设备驱动、块设备驱动和网络设备驱动 字符设备:只能一个一个字节读写数据的设备,不能随机读取设备内存中的某一数据 块设备:可以从设备的任意位置读取一定长度数据的设备 在 /dev 目录中 执行 ls-l 时 第一个字母为c表示该设备为字符设备,为b表示块设备主设备号和次设备号一个字符设备或者块设备都有一个主设备号和一个此设备号,统称为设备号。主设备号用来表示一原创 2017-01-23 16:50:25 · 437 阅读 · 0 评论 -
将模块编译进内核
示例:将Add_Sub模块编译进内核在内核源码的driver下新建AddSub_Kconfig子目录并将该模块源码放入该目录 can@ubuntu:~/tiny4412/linux-3.8_test/drivers$ tree AddSub_Kconfig/ AddSub_Kconfig/ |– Add_Sub.c |– Add_Sub.h `– test.c原创 2017-01-23 14:40:51 · 538 阅读 · 0 评论 -
关于linux module 的调用
模块参数设备驱动程序有时候需要接受参数,例如当模块可以实现两种相似功能时,可以传递一个参数到驱动模块以决定其使用哪种功能,例如在加载模块时指定 insmod xxx.ko param=1可以使用 “module_param(参数名,参数数据类型,参数读写权限)” 来为模块定义个参数,例如下列代码定一个了一个长整形和整形参数static long a=1;static int b=1;module原创 2017-01-22 10:15:32 · 2857 阅读 · 0 评论 -
linux 模块的编译和加载
一个最简单的linux模块//头文件#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("GPL"); MODULE_AUTHOR("CAN"); int test_module_init(){ printk("module init\n"); return 0;} void te原创 2017-01-18 10:47:05 · 526 阅读 · 0 评论 -
tiny 4412 led module
led.c#include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/io.h> #include <linux/fs.h> #include <linux/ioctl.h> #include <linux/miscdevice.h> #define原创 2017-01-20 11:12:34 · 613 阅读 · 0 评论 -
编译linux内核
1.安装交叉编译环境2.下载源码3.修改顶层MakefileARCH =? ARM,CORSS_COMPILE =? arm-linux-生成CPU配置.config make menuconfig原创 2016-12-06 15:25:02 · 195 阅读 · 0 评论 -
使用ssh远程连接开发板
准备tiny4412开发板烧录Ubuntucore步骤1.将开发板联网 2.安装ssh服务 sudo apt-get install openssh-server顺带备忘下相关命令 启动、停止和重启SSH: sudo /etc/init.d/ssh start sudo /etc/init.d/ssh stop sudo /etc/init.d/ssh res原创 2016-12-03 22:14:05 · 4519 阅读 · 0 评论 -
s5PV210 UART
接着折腾了下串口 只是简单实现发送功能首先找到引脚关系,这里就不贴原理图了 串口1的引脚是 gpio_a0的低两位 在这里只需要配置 TX 和RX接下来就是配置串口的参数 ULCONn:数据位 奇偶校验 停止位 跟上位机配置成一样就好 按照这个 普通模式 ulcon = 0b0000011 = 0x03接着设置模式寄存器 UCON 设置原创 2016-08-14 21:00:59 · 378 阅读 · 0 评论 -
s5pv210(tiny210)gpio地址表
画了一个下午点灯,谢天谢地总算点完了,关于s5pv210的地址表一直没找到,这里写下备忘。#ifndef _S5PV210_GPIO_H#define _S5PV210_GPIO_H#define S5PV210_GPIOBASE (0XE0200000) //基地址struct s5pc210_gpio_bank { unsigned int con; unsigned int原创 2016-08-14 17:01:43 · 495 阅读 · 0 评论 -
学习rt-thread
隐隐感觉自己要把 一起来学rt-thread 抄一遍了官方网站http://www.rt-thread.org/查看代码以stm32f10x为例 使用keil mdk 下载源码进入\bsp\stm32f10x目录 打开工程启动过程在startup.c中找到main函数 如下int main(void){ /* disable interrupt first */ rt_hw_int原创 2017-01-30 22:39:19 · 3339 阅读 · 0 评论