嵌入式开发实验笔记(三)

实验笔记3

Date: 2017年11月11日

Statement: Learning how to write a char device program by myself. 掌握驱动开发的基本流程, 以及一些基本的驱动开发思想;

1. 基本概念

Application, C library, kernel and the Driver

19-1.png

2. 实验过程中的所感

因为这一次的学习相比于暑假期间的教材多了很多, 具有了更多的参考。所以这次的笔记没有以往那么多。主要内容在字符设备驱动的思维导图之中。

时间 ---- 2017年11月13日

  1. 在没有看视频的情况下, 参考以前的代码, 自己独立完成视频教程12课前3节的内容。GPIO方面的硬件操作简单, 字符设备驱动的基本框架也已经完成了。

3. 知识点

  1. 异常和中断的区别:

    1. 中断: 指系统停止当前正在运行的程序而转向其他服务,可能是因为优先级高的请求服务了,或者是因为人为安排中断。中断是属于正常现象。主要由CPU以外的事件引起的中断,如I/O中断、时钟中断、控制台中断等。
    2. 异常: 是由于软件错误而引起的来自CPU的内部事件或程序执行中的事件引起的过程。如由于CPU本身故障、程序故障和请求系统服务的指令引起的中断等。
  2. 中断的处理过程

    1. 外部中断源触发(按键按下, 或其他);

    2. CPU 接受中断, 调到异常向量入口执行;

    3. 执行某个函数:

      1. 保存被中断的现场(被中断前, 寄存器的值还有处理器的状态);
      2. 执行中断处理函数, (类似于按键触发之后, 指定的LED灯亮);
      3. 恢复中断现场;‘

      以下是中断处理过程, 上面的过程是ARM结构对于异常处理的结构

    4. 分辨 是哪一个中断;

    5. 调用中断处理函数;

    6. 清中断

  3. ARM体系CPU的7种工作模式

  1. 用户模式(usr);
  2. 快速中断模式(fiq);
  3. 中断模式(irq);
  4. 管理模式(svc);
  5. 数据访问终止模式(abt);
  6. 系统模式(sys);
  7. 未定义指令中止模式(und);
  1. Linux异常处理结构
  1. trap_init (./arch/arm/kernel/traps.c) 设置各种异常处理向量。(即固定位置异常处理指令, 其中基地址为0xffff0000。[ARM架构异常向量基地址有0x00000000和0xffff0000, linux内核中习惯使用后者])
  1. trap_init 构造异常向量;
  2. vector_irq(用宏实现); --- (执行的就是中断处理的过程) ;
  1. Linux中断处理结构
asm_do_TRQ();
   desc = irq_desc[irq];  // irq 中断号, 有宏定义指定
   desc->handle_irq(); // 处理中断
   handle_irq() -> handle_edge_irq()[example]
       desc->chip->ack(irq);     // 清中断
       handle_IRQ_event();       // 中断处理
           action -> handler();  // handler即为自己的中断处理函数
struct irq_desc {
  handler_irq;    // 中断触发类型(边沿触发...)
  chip;     // 芯片相关的底层操作;
  action;   
};
request_irq(); 
/*  irq -- 中断号
 * handler -- 处理函数
 * irqflags -- 触发类型标志(上升沿触发...)
 * devname -- 设备名字
 * devid -- 设备ID
 */
   struct irqaction atcion;  // 分配结构
   setup_irq(irq, action); // 设置IRQ;
       irq_desc[irq]->action = action;    // 放入指定链表结构
       desc->chip->settype ( );        // 设置引脚
       desc->chip->startup/enable( );  // 使能中断
free_irq (irq, devid);
   // 从irq_desc[irq]->action 移除 action
   // 禁止中断(非共享中断)
20-2.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容

  • 奔波回老家的日子里,回来太累了。好好休息一下,但自己又爱折腾自己,不折腾不休的感觉。今天晚上我妹妹和我说,你从车上...
    黄玉翠阅读 477评论 0 1
  • 好久不见呀~今天的内容其实更多的是我个人看完小说《有匪》后的……嗯……读后感。 进入正题。 后昭建元十七年,山河分...
    LL的面包树阅读 1,428评论 0 0
  • 1. 这是上次吃饭的时候听一个朋友说的。 他说,他有一次去参加一个校际的一个高峰论坛。当时由于工作的关系,要找浙工...
    遣词君阅读 496评论 1 6