代码分析

Linux下Nand Flash 驱动代码分析

半腔热情 提交于 2019-12-04 04:59:26
随着越来越多的平台支持从Nand Flash 中启动,掌握Nand Flash 的驱动编写有着重要的现实意义,由于内核已经完成了大部分的工作,实际工作中大部分工程师对Nand Flash 驱动只是简单的修改。 下面分析一下Nand Flash 的代码流程: 学习Nand Flash 之前,需要对块设备中下面2点有个认识: 1, gendisk: 描述块设备实体(一整个Nand Flash 芯片)的结构体,整个块设备的注册过程都是围绕gendisk 来开展的; 2, add_disk(): 将一个分区信息(如:/dev/mtdblock3)注册到内核列表中 下面分析具体的驱动: 1, s3c2410 nandflash 控制器初始化步骤 s3c2410_nand_init(&s3c2410_nand_driver) ->driver_register->bus_add_driver()->driver_attach->bus_for_each_dev(_driver_attach)->driver_probe_device()->dev->probe() /*最后这个函数实质是 s3c2410_nand_probe() */ ->s3c2410_nand_probe() ->s3c24xx_nand_probe() ->s3c2410_nand_inithw() /*

Erlang的supervisor

荒凉一梦 提交于 2019-12-02 10:01:50
万事皆有因 这件事情的开始是非常加单的,我想把几个模块独立化,变的可以重复使用。然后就创建了几个application,但是将几个模块整合到同一个项目的时候,犯了一个小小的错误,这个错误虽然不是很致命,但是是一个非常不好的。 产生原因 一开始,我有一个主干项目A,创建了SupervisorA。之后我创建了一个项目B,同时创建了一个SupervisorB。然后将两个项目整合的时候,我项目B中的模块X的start_link的代码如下面这样 -module(mod_x). -export([start_link/1]). start_link(opts)-> Child = {mod_y,{mod_y,start_link,[]},permanent,5000,worker,[mod_y], supervisor:start_child(supervisor_b,Child). 然后我在主干项目中的 SupervisorA的代码写成了这个样子 -module(supervisor_a). -export([start_link/0]). -export([init/1]). start_link() -> supervisor:start_link({local, ?MODULE}, ?MODULE, []). init([])-> RestartStrategy = {one_for