目前課程影片進行到CH3-3 Linux GPIO Host Controller驅動程式,有一些問題如下:
- 01_LED中chr_led.c使用gpio_set_val
ue對GPIO Pin設定輸出值,往Kernel Source Code追: gpio_set_value -> __gpio_set_value -> gpiod_set_raw_value -> _gpiod_set_raw_value ->
static void _gpiod_set_raw_value(struct gpio_desc *desc, bool value)
{
struct gpio_chip *chip;
chip = desc->chip;
trace_gpio_value(desc_to_gpio(desc), 0, value);
if (test_bit(FLAG_OPEN_DRAIN, &desc->flags))
_gpio_set_open_drain_value(desc, value);
else if (test_bit(FLAG_OPEN_SOURCE, &desc->flags))
_gpio_set_open_source_value(desc, value);
else
chip->set(chip, gpio_chip_hwgpio(desc), value);
}
追到最後是課程影片中提到的struct gpio_chip,但是課程提供的Image中找不到bcm2708_gpio.c這個檔案,struct gpio_chip中的function應該都是實作在這個檔案 中?
~/linux-rpi-4.4.y/drivers/bcm a/driver_gpio.c ==> gpio chip driver
- 根據課程影片,gpio_set_value是上層API,由K
ernel定義。struct gpio_chip中的function pointer實作則為底層硬體相關,這個部分理論上應該是So C廠實作並提供給客戶嗎?想知道業界實務上怎麼分配?實務上, 如果拿到一塊公版,SoC Vendor會提供整包Linux或Android Source Code,我們只需要針對自己選擇的外接硬體寫驅動程式嗎?
- SoC Vendor是否連Driver Template都會一起提供於整包OS Source Code中,只需要修改對應硬體部分?譬如,選擇的Displa
y不同,選擇的Sensor不同,只需要在module_ init()中修改初始化代碼?
晶片廠通常提供的BSP ,會做好大部份SoC Driver. 若是自己自行外接的, 則要靠自己去撰寫或移植
沒有留言 :
張貼留言