lk中的bio機制 2

2021-07-22 18:22:10 字數 988 閱讀 1195

bio中除了可以使用真實的block dev,還可以使用memory中的block dev,這樣每次可以讀寫block count 的資料,加快讀寫的速度。

int create_membdev(const char *name, void *ptr, size_t len)

create_membdev會建立乙個membdev,和前面講的一樣先呼叫bio_initialize_bdev,然後呼叫bio_register_device

我們重點看看mem->dev.read是如何實現的

static ssize_t mem_bdev_read(bdev_t *bdev, void *buf, off_t offset, size_t len)

原來只要memcpy就搞定了,因為原本就在memory中呀,不牽扯真實的dev

前面講了bio的兩種case,實際使用的時候是使用subdev,是對真實dev的一層封裝,我們看看具體是怎麼封裝的。

status_t bio_publish_subdevice(const char *parent_dev, const char *subdev, bnum_t startblock, size_t len)

原來直接使用bio_publish_subdevice,就可以了,不用在分兩步了,bio_publish_subdevice裡面已經呼叫了bio_initialize_bdev和bio_register_device

我們看看其subdev_read的實現

static ssize_t subdev_read(struct bdev *_dev, void *buf, off_t offset, size_t len)

呼叫bio_read,繼續看其實現

ssize_t bio_read(bdev_t *dev, void *buf, off_t offset, size_t len)

最終還是呼叫dev->read

所以bio使用的時候直接呼叫bio_publish_subdevice就可以了

lk中的dprintf實現

在lk中我們一般通過dprintf來列印log,如下所示 dprintf info,0x x t tls i 其中info表示log的級別,lk中總共有三種級別 debug levels define critical 0 define always 0 define info 1 define s...

lk中中斷的處理flow

在li的crt0.s 中會定義中斷的入口。例如如果是irq中斷會呼叫arm irq start breset barm undefined barm syscall barm prefetch abort barm data abort barm reserved barm irq barm fiq...

高通LK中GPIO的配置和使用

高通 lk中的gpio配置函式定義 void gpio tlmm config uint32 t gpio,uint8 t func,uint8 t dir uint8 t pull,uint8 t drvstr,uint32 t enable define gpio config addr x t...