Linux開發十四
ohci驅動
象棋小子 1048272975
usb接口簡單、即插即用、支持熱插拔等優點,在各種場合已經大量使用,在嵌入式系統中,也常常需要通過usb外接u盤、鍵盤、鼠標等設備。Linux內核已經支持usb主機控制協議ohci,可以支持u盤、鍵盤、鼠標等usb設備。
1. ohci設備
ohci設備包含了名字、獨有的資源等等一些驅動程序的硬件或自定義信息。通過platform_add_devices(platform_device_register)函數將定義的平臺設備註冊到內核中,用於匹配設備驅動。
內核在drivers\usb\host\ohci-s3c2410.c中實現了s3c2416 ohci驅動, ohci設備的平臺代碼如下。
#ifdef CONFIG_S3C_DEV_USB_HOST
static struct resources3c_usb_resource[] = {
[0]= DEFINE_RES_MEM(S3C_PA_USBHOST, SZ_256),
[1]= DEFINE_RES_IRQ(IRQ_USBH),
};
struct platform_device s3c_device_ohci ={
.name = "s3c2410-ohci",
.id = -1,
.num_resources = ARRAY_SIZE(s3c_usb_resource),
.resource = s3c_usb_resource,
.dev = {
.dma_mask = &samsung_device_dma_mask,
.coherent_dma_mask = DMA_BIT_MASK(32),
}
};
#endif /* CONFIG_S3C_DEV_USB_HOST */
在static struct platform_device *home2416_devices[]板級平臺設備列表中加入&s3c_device_ohci,使ohci設備能夠註冊到內核中。
2. 內核配置
Linux配置支持ohci設備驅動,選中Device Drivers->USB support->OHCIsupport for Samsung S3C24xx/S3C64xx Soc series,並且選中USB Mass Storage support,用於支持u盤。
u盤使用fat32文件系統,配置內核支持vfat文件系統。File systems->DOS/FAT/NT Filesystems->VFAT (Windows-95) fssupport。
3. u盤測試
cat /proc/partitions可以知道u盤的主設備號爲8,次設備號爲0,在/dev目錄中創建sda設備文件。
mknod /dev/sda b 8 0
先對sd卡格式化成vfat文件系統。
mkfs.vfat /dev/sda
掛載sda設備。
mkdir /mnt/udisk
mount /dev/sda /mnt/udisk
對u盤讀寫文件。
echo This is file test. > /mnt/udisk/test.txt
cat /mnt/udisk/test.txt
4. 附錄
https://pan.baidu.com/s/1slczwhJ
bootloader源碼以及使用說明
https://pan.baidu.com/s/1eRDJtNs
Qt5.8官網源碼
https://pan.baidu.com/s/1nuGmSqt
本系列例程的根文件系統
https://pan.baidu.com/s/1i5btLGT
opev3.2.0官網源碼
https://pan.baidu.com/s/1pLpuHw3
yaffs官網源碼
https://pan.baidu.com/s/1bpkZynt
busybox-1.26.2官網源碼
https://pan.baidu.com/s/1i4EtjfR
tslib官網源碼
https://pan.baidu.com/s/1i5MGRhb
mplayer-1.3.0官網源碼
https://pan.baidu.com/s/1sl0fXlr
基於S3C2416修改的linux-4.10.10源碼