91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux USB開發(fā)指南

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-06 10:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Linux USB 開發(fā)指南

1 前言

1.1 文檔簡介

介紹 USB 模塊配置和調(diào)試方法。

1.2 目標(biāo)讀者

USB 模塊開發(fā)、維護(hù)人員。

1.3 適用范圍

表 1-1: 適用產(chǎn)品列表

內(nèi)核版本 驅(qū)動(dòng)文件
Linux-4.9 drivers/usb/*
Linux-5.4 drivers/usb/*

2 模塊介紹

2.1 模塊功能介紹

USB 有主機(jī)功能和從設(shè)備功能。做主機(jī)時(shí),能連接 U 盤、USB 鼠標(biāo)等 USB 設(shè)備;做從設(shè)備時(shí),具有 ADB 調(diào)試等從設(shè)備功能。

2.2 相關(guān)術(shù)語介紹

表 2-1: 術(shù)語介紹

術(shù)語 說明
USB Universal Serial Bus, 通用串行總線
OTG On-The-Go
ADB Android Debug Bridge,Android 調(diào)試橋
Gadget 小配件
HCD Host Controller Driver,主機(jī)控制器驅(qū)動(dòng)
UDC USB Device Controller, USB 設(shè)備控制器
HCI Host Controller Interface,主機(jī)控制器接口
EHCI Enhanced Host Controller Interface,增強(qiáng)型主機(jī)控制器接口
OHCI Open Host Controller Interface,開放式主機(jī)控制器接口

2.3 模塊配置介紹

2.3.1 Device Tree 配置說明

設(shè)備樹中存在的是該類芯片所有平臺(tái)的模塊配置,設(shè)備樹文件的路徑為:kernel/linux-4.9/arch/arm64(32 位平臺(tái)為 arm)/boot/dts/sunxi/xxx.dtsi(xxx 為具體芯片型號(hào),如 sun50iw10p1 等), 設(shè)備樹配置如下所示:

? USB0 配置

usbc0:usbc0@0 {

device_type = "usbc0";

compatible = "allwinner,sunxi-otg-manager";

usb_port_type = <2>;

usb_detect_type = <1>;

usb_id_gpio;

usb_det_vbus_gpio;

usb_regulator_io = "nocare";

usb_wakeup_suspend = <0>;

usb_luns = <3>;

usb_serial_unique = <0>;

usb_serial_number = "20080411";

rndis_wceis = <1>;

status = "okay";

};

?

udc:udc-controller@0x05100000 {

compatible = "allwinner,sunxi-udc";

reg = <0x0 0x05100000 0x0 0x1000>, /*udc base*/

<0x0 0x00000000 0x0 0x100>, /*sram base*/

<0x0 0x05200000 0x0 0x1000>; /*usb1 base, for common circuit*/

interrupts = ; /*設(shè)備使用的中斷*/

clocks = <&clk_usbphy0>, <&clk_usbotg>, <&clk_usbehci1>, <&clk_usbphy1>; /*設(shè)備使用的時(shí)鐘*/

status = "okay"; /*是否使能該設(shè)備*/

};

?

ehci0:ehci0-controller@0x05101000 {

compatible = "allwinner,sunxi-ehci0";

reg = <0x0 0x05101000 0x0 0xFFF>, /*hci0 base*/

<0x0 0x00000000 0x0 0x100>,

<0x0 0x05100000 0x0 0x1000>,

<0x0 0x07010250 0x0 0x10>, /*prcm base, for usb standby*/

<0x0 0x05200000 0x0 0x1000>; /*usb1 base, for common circuit*/

interrupts = ;

clocks = <&clk_usbphy0>, <&clk_usbehci0>, <&clk_usbehci1>, <&clk_usbphy1>;

hci_ctrl_no = <0>; /*主機(jī)控制器的序列*/

status = "okay";

};

?

ohci0:ohci0-controller@0x05101400 {

compatible = "allwinner,sunxi-ohci0";

reg = <0x0 0x05101000 0x0 0xFFF>, /*hci0 base*/

<0x0 0x00000000 0x0 0x100>,

<0x0 0x05100000 0x0 0x1000>,

<0x0 0x07010250 0x0 0x10>, /*prcm base, for usb standby*/

<0x0 0x05200000 0x0 0x1000>;/*usb1 base, for common circuit*/

interrupts = ;

clocks = <&clk_usbphy0>, <&clk_usbohci0>, <&clk_usbohci1>, <&clk_usbphy1>;

hci_ctrl_no = <0>;

status = "okay";

};

? USB1 配置

usbc1:usbc1@0 {

device_type = "usbc1";

usb_regulator_io = "nocare";

usb_wakeup_suspend = <0>;

status = "okay";

};

?

ehci1:ehci1-controller@0x05200000 {

compatible = "allwinner,sunxi-ehci1";

reg = <0x0 0x05200000 0x0 0xFFF>,

<0x0 0x00000000 0x0 0x100>,

<0x0 0x05100000 0x0 0x1000>,

<0x0 0x07010250 0x0 0x10>;

interrupts = ;

clocks = <&clk_usbphy1>, <&clk_usbehci1>;

hci_ctrl_no = <1>;

status = "okay";

};

?

ohci1:ohci1-controller@0x05200400 {

compatible = "allwinner,sunxi-ohci1";

reg = <0x0 0x05200000 0x0 0xFFF>,

<0x0 0x00000000 0x0 0x100>,

<0x0 0x05100000 0x0 0x1000>,

<0x0 0x07010250 0x0 0x10>;

interrupts = ;

clocks = <&clk_usbphy1>, <&clk_usbohci1>, <&clk_usbohci1_12m>, <&clk_osc48md4>, <&clk_hosc>, <&clk_losc>;

hci_ctrl_no = <1>;

status = "okay";

};

2.3.2 board.dts 配置說明

board.dts 用于保存每一個(gè)板級(jí)平臺(tái)的設(shè)備信息(如 demo 板,perf1 板等),里面的配置信息會(huì)覆蓋上面的 Device Tree 默認(rèn)配置信息。不同 soc、版型及內(nèi)核版本對(duì)應(yīng)的 board.dts 具體路徑如下:device/config/chips/soc/conf igs/{board}/${內(nèi)核版本}/board.dts。

? USB0 配置

usbc0:usbc0@0 {

device_type = "usbc0";

usb_port_type = <0x2>;

usb_detect_type = <0x1>;

usb_id_gpio = <&pio PH 8 0 0 0xffffffff 0xffffffff>;

usb_det_vbus_gpio = "axp_ctrl";

usb_regulator_io = "nocare";

det_vbus_supply = <&usb_power_supply>;

usb_wakeup_suspend = <0>;

usb_luns = <3>;

usb_serial_unique = <0>;

usb_serial_number = "20080411";

rndis_wceis = <1>;

status = "okay";

};

?

注:(1)usb_port_type:usb0口默認(rèn)的模式。

置0:devcie模式;

置1:host模式;

置2:otg模式。

(2)usb_detect_type:usb0口otg檢測(cè)模式。

置0:不做檢測(cè);

置1:vbus/id檢測(cè);

置2:id/dpdm檢測(cè)。

(3)usb_wakeup_suspend:standby模式。

置0:super standby模式;

置1:usb standby模式,支持遠(yuǎn)程喚醒。

?

udc:udc-controller@0x51000000 {

det_vbus_supply = <&usb_power_supply>

}

?

ehci0:ehci0-controller@0x05101000 {

drvvbus-supply = ;

};

?

ohci0:ohci0-controller@0x05101400 {

drvvbus-supply = ;

};

說明

若使用 usb standby 模式,需注意如下:

1、IC 支持遠(yuǎn)程喚醒;

2、若條件 1 滿足,相關(guān)硬件部分需嚴(yán)格按照《硬件設(shè)計(jì)文檔》設(shè)計(jì);

3、若條件 1、2 滿足,額外添加屬性 “wakeup-source;”, 啟用 usb standby 功能。

? USB1 配置

usbc1:usbc1@0 {

device_type = "usbc1";

usb_regulator_io = "nocare";

usb_wakeup_suspend = <0>;

status = "okay";

};

?

ehci1:ehci1-controller@0x05200000 {

drvvbus-supply = ;

};

?

ohci1:ohci1-controller@0x05200400 {

drvvbus-supply = ;

};

? Vbus 配置

reg_usb1_vbus: usb1-vbus {

compatible = "regulator-fixed";

gpio = <&pio PH 10 1 2 0 1>;

regulator-name = "usb1-vbus";

regulator-min-microvolt = <5000000>;

regulator-max-microvolt = <5000000>;

regulator-enable-ramp-delay = <1000>;

enable-active-high;

};

2.3.3 kernel menuconfig 配置說明

進(jìn)入內(nèi)核根目錄,執(zhí)行 make ARCH=arm menuconfig(64 位平臺(tái)為 make ARCH=arm64 menuconfig)進(jìn)入配置主界面,并按以下步驟操作:

選擇 Device Drivers 選項(xiàng)進(jìn)入下一級(jí)配置,如下圖所示。

poYBAGQFUAuAAVtEAACAcbFbf2w943.png

圖 2-1: Device Drivers 選項(xiàng)配置

選擇 USB support 選項(xiàng),進(jìn)入下一級(jí)配置,如下圖所示。

pYYBAGQFUAuAfzbxAADu0NrG2Go407.png

圖 2-2: USB Support 選項(xiàng)配置

打開如下兩圖的選項(xiàng),如下圖所示。

poYBAGQFUAyAYFqCAAEGgXJGmkc616.png

圖 2-3: USB Support 詳細(xì)配置 1

pYYBAGQFUA2Ado1IAAE3n33w1wU679.png

圖 2-4: USB Support 詳細(xì)配置 2

選擇 USB Gadget Support,進(jìn)入下一級(jí)配置,如下圖所示。

poYBAGQFUA2AOil4AAEmLSt3IcA646.png

圖 2-5: USB Gadget Support 選項(xiàng)配置

打開下圖的選項(xiàng),并在對(duì)應(yīng)配置中打開所需的功能性配置, 如: 需要存儲(chǔ)功能時(shí), 需打開下圖中的 “mass storage” 配置, 如下圖所示。

pYYBAGQFUA6AOuatAADfLt6EGrE750.png

圖 2-6: USB Gadget Support 詳細(xì)配置

進(jìn)入 USB Peripheral Controller,并打開下圖選項(xiàng):

poYBAGQFUA-AUQ31AACoB9RPxfY632.png

圖 2-7: USB Peripheral Controller 詳細(xì)配置

返回上一級(jí),即 USB support,進(jìn)入 SUNXI USB2.0 Dual Role controller support,并打開下圖選項(xiàng),如下圖所示。

pYYBAGQFUA-ANRD4AAB8v7Cisn0227.png

圖 2-8: SUNXI USB2.0 Dual Role Controller Support 詳細(xì)配置

若需支持 MTP PTP 等功能需開啟 TYPEC 配置返回上一級(jí),即 USB support,進(jìn)入 USB Type-C Support,并打開下圖選項(xiàng),如下圖所示:

poYBAGQFUBCAHdOCAAHUvodoe3Y915.png

圖 2-9: USB Type-C Support 詳細(xì)配置

2.4 源碼結(jié)構(gòu)介紹

USB 驅(qū)動(dòng)的源代碼位于內(nèi)核 drivers/usb 目錄下,如下是 sunxi 平臺(tái)相關(guān)源碼:

? Host

drivers/usb/host/

├── ehci_sunxi.c

├── ohci_sunxi.c

├── sunxi_hci.c

├── sunxi_hci.h

? UDC 和 Manager

drivers/usb/sunxi_usb/

├── include

│ ├── sunxi_hcd.h

│ ├── sunxi_sys_reg.h

│ ├── sunxi_udc.h

│ ├── sunxi_usb_board.h

│ ├── sunxi_usb_bsp.h

│ ├── sunxi_usb_config.h

│ ├── sunxi_usb_debug.h

│ └── sunxi_usb_typedef.h

├── Kconfig

├── Makefile

├── manager

│ ├── usbc0_platform.c

│ ├── usbc_platform.h

│ ├── usb_hcd_servers.c

│ ├── usb_hcd_servers.h

│ ├── usb_hw_scan.c

│ ├── usb_hw_scan.h

│ ├── usb_manager.c

│ ├── usb_manager.h

│ ├── usb_msg_center.c

│ └── usb_msg_center.h

├── misc

│ └── sunxi_usb_debug.c

├── udc

│ ├── sunxi_udc_board.c

│ ├── sunxi_udc_board.h

│ ├── sunxi_udc.c

│ ├── sunxi_udc_config.h

│ ├── sunxi_udc_debug.c

│ ├── sunxi_udc_debug.h

│ ├── sunxi_udc_dma.c

│ └── sunxi_udc_dma.h

└── usbc

├── usbc.c

├── usbc_dev.c

├── usbc_i.h

└── usbc_phy.c

2.5 驅(qū)動(dòng)框架介紹

Linux 內(nèi)核提供了完整的 USB 驅(qū)動(dòng)程序框架。USB 總線采用樹形結(jié)構(gòu),在一條總線上只能有唯一的主機(jī)設(shè)備。Linux 內(nèi)核從主機(jī)和設(shè)備兩個(gè)角度觀察 USB 總線結(jié)構(gòu)。下圖是 Linux 內(nèi)核從主機(jī)和設(shè)備兩個(gè)角度觀察 USB 總線結(jié)構(gòu)的示意圖。

poYBAGQFUBGAZSquAAGUMkCwhQ4518.png

圖 2-10: USB 驅(qū)動(dòng)總體結(jié)構(gòu)

USB 子系統(tǒng)主要任務(wù)包括:

a. 注冊(cè)和管理設(shè)備驅(qū)動(dòng);

b. USB 設(shè)備尋找驅(qū)動(dòng),并初始化和配置設(shè)備;

c. 內(nèi)核中表現(xiàn)設(shè)備的樹形結(jié)構(gòu);

d. 與設(shè)備交互。

2.6 Gadget 配置

Gadget 是指具有 USB 設(shè)備控制器的 USB 設(shè)備,根據(jù)具體的功能配置,連接到 PC 后可以作為 mass storage、uac 等設(shè)備。Linux 有原生 gadget 框架,通用的配置流程可參考下文。

2.6.1 打開內(nèi)核配置

需在 “USB functions configurable through configfs” 下選擇需要的功能。

pYYBAGQFUBGAEdfoAADMLbfXi2U621.png

圖 2-11: linux-4.x usb gadget 配置選擇

2.6.2 linux-4.x/linux-5.4 USB Gadget 配置流程

Linux-4.x/Linux-5.4 使用 configfs 框架實(shí)現(xiàn) composite gadget 功能。具體流程如下:

? 掛載 configs:

mount -t configfs none /sys/kernel/config

掛載完成之后在/sys/kernel/config 目錄下就會(huì)生成 usb_gadget/目錄。

? 建立 gadgets:

mkdir /sys/kernel/config/usb_gadget/g1

創(chuàng)建g1/目錄之后,該目錄下會(huì)生成很多配置目錄,這里的g1表示 gadget 1,一個(gè) UDC 對(duì)應(yīng)一個(gè) gadget,如果你的 SOC 上有多個(gè) gadget,可以創(chuàng)建多個(gè)gx目錄。

? 寫入 gadget 的 PID、VID、序列號(hào)等信息:

echo "VID" > /sys/kernel/config/usb_gadget/g1/idVendor echo "PID" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 echo "manufacturer" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer echo "product" > /sys/kernel/config/usb_gadget/g1/strings/0x409/product

? 建立 gadget 相關(guān)配置 configurations

mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409

? 建立功能 functions

mkdir /sys/kernel/config/usb_gadget/g1/functions/.

:function name :任意字符串

? 建立功能和配置的鏈接

ln -s /sys/kernel/config/usb_gadget/g1/functions/. /sys/kernel/config/ usb_gadget/g1/configs/c.1

? 使能 gadget

echo > UDC

常見 Gadget 功能的配置方式見附錄。

2.7 端點(diǎn)配置

在 Gadget 配置使用過程中,可能出現(xiàn)端點(diǎn)的默認(rèn)配置方式無法滿足需求的情況,故需對(duì)端點(diǎn)進(jìn)行修改滿足需求。可參考現(xiàn)有的端點(diǎn)進(jìn)行修改。譬如將批量端點(diǎn)改成中斷端點(diǎn),參考現(xiàn)有的中斷端點(diǎn)進(jìn)行修改即可。改動(dòng)內(nèi)容包括端點(diǎn) fifo 大小,端點(diǎn)屬性,端點(diǎn)方向。

2.7.1 端點(diǎn) fifo 大小

以4k平臺(tái)為例: static const struct sw_udc_fifo ep_fifo[] = { {ep0name, 0, 512, 0},/*name, fifo_addr, fifo_size, double_fifo*/ {ep1in_bulk_name, 512, 512, 0}, {ep1out_bulk_name, 1024, 512, 0}, {ep2in_bulk_name, 1536, 512, 0}, {ep2out_bulk_name, 2048, 512, 0}, {ep3_iso_name, 2560, 1024, 0}, {ep4_int_name, 3584, 512, 0}, };

2.7.2 端點(diǎn)的屬性

.ep[2] = { .num = 1, .ep = { .name = ep1out_bulk_name, .ops = &sunxi_udc_ep_ops, .maxpacket = SW_UDC_EP_FIFO_SIZE, .maxpacket_limit = SW_UDC_EP_FIFO_SIZE, .caps = USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT), }, .dev = &sunxi_udc, .bEndpointAddress = (USB_DIR_OUT | 1), .bmAttributes = USB_ENDPOINT_XFER_BULK, },

2.7.3 定義端點(diǎn)的方向

/** * ep_fifo_in[i] = {n} i: the physic ep index, n: ep_fifo's index for the ep * * eg: ep_fifo_in[2] = {3} ===> ep2_in is in ep_fifo[3] * * ep3_iso_name and ep4_int_name cannot be tx or rx simultaneously. * */ static const int ep_fifo_in[] = {0, 1, 3, 5, 6, 7}; static const int ep_fifo_out[] = {0, 2, 4, 5, 6, 8};

2.8 調(diào)試方法

2.8.1 調(diào)試節(jié)點(diǎn)

2.8.1.1 USB0 調(diào)試節(jié)點(diǎn)

查看 USB0 當(dāng)前 Role

cat /sys/devices/platform/soc/usbc0/otg_role

手動(dòng)切換到 Host 模式

cat /sys/devices/platform/soc/usbc0/usb_host

手動(dòng)切換到 Device 模式

cat /sys/devices/platform/soc/usbc0/usb_device

2.8.1.2 USB1 調(diào)試節(jié)點(diǎn)

卸載主機(jī)驅(qū)動(dòng)

通過下述命令找到主機(jī)驅(qū)動(dòng)節(jié)點(diǎn)及對(duì)應(yīng)路徑

find -name ehci_enable find -name ohci_enable

然后根據(jù)上述結(jié)果,按如下命令卸載主機(jī)驅(qū)動(dòng) (以 t5 平臺(tái)為例)

echo 0 > sys/devices/platform/soc/5200000.ehci1-controller/ehci_enable echo 0 > sys/devices/platform/soc/5200000.ohci1-controller/ohci_enable

加載主機(jī)驅(qū)動(dòng)

通過下述命令找到主機(jī)驅(qū)動(dòng)節(jié)點(diǎn)及對(duì)應(yīng)路徑

find -name ehci_enable find -name ohci_enable

然后根據(jù)上述結(jié)果,按如下命令加載主機(jī)驅(qū)動(dòng) (以 t5 平臺(tái)為例)

echo 1 > sys/devices/platform/soc/5200000.ehci1-controller/ehci_enable echo 1 > sys/devices/platform/soc/5200000.ohci1-controller/ohci_enable

2.8.2 眼圖測(cè)試

2.8.2.1 USB Device 眼圖測(cè)試

獲取otg_ed_test的路徑path find /sys/ -name otg_ed_test 測(cè)試眼圖命令 echo test_pack > path/otg_ed_test

2.8.2.2 USB Host 眼圖測(cè)試

獲取ed_test的路徑path find /sys/ -name ed_test 測(cè)試眼圖命令 echo test_pack > path/ed_test

3 FAQ

3.1 常見問題

3.1.1 USB 基本功能異常排查

3.1.1.1 USB Host 基本功能異常排查步驟

? 多找?guī)讉€(gè) USB 設(shè)備試試,排除個(gè)別 USB 設(shè)備本身的問題。

? 多更換幾根 USB 線纜試試,排除個(gè)別 USB 線纜的問題。

? 多找?guī)讉€(gè) PC 主機(jī)做相同的實(shí)驗(yàn),作為參考對(duì)比。若在 PC 有相同現(xiàn)象,則認(rèn)為正常。

? 若硬件有多個(gè) USB 口,嘗試同樣條件下測(cè)試其他 USB 口的主機(jī)功能是否正常。

? 樣機(jī)設(shè)備 USB 口外接獨(dú)立供電的 USB-HUB 設(shè)備,再將 USB 設(shè)備連接到 USB-HUB 上,確認(rèn)主機(jī)功能是否正常。

? 確認(rèn)主機(jī)驅(qū)動(dòng)是否加載成功。

(1)若為 USB0 口,則可通過如下方式確認(rèn):

cat /sys/devices/platform/soc/usbc0/otg_role

(2)若為 USB1 口,可通過如下方式確認(rèn):

cat sys/devices/platform/soc/5200000.ehci1-controller/ehci_enable cat sys/devices/platform/soc/5200000.ohci1-controller/ohci_enable

若為0,則沒有加載Host驅(qū)動(dòng)。

? 重新加載 Host 驅(qū)動(dòng),確認(rèn)此時(shí)功能是否正常。

(1)若為 USB0 口,則可通過如下方式:

方式1:重新插拔OTG線。 方式2:手動(dòng)切換到Host模式。

(2)若為 USB1 口,則可通過卸載驅(qū)動(dòng)、再加載驅(qū)動(dòng)。

? 對(duì)比 SDK 代碼與最新發(fā)布的代碼或者補(bǔ)丁, 確認(rèn)代碼是否更新到最新。

? 同樣條件下,分別打印出功能異常板子和功能正常板子的相關(guān)寄存器,并進(jìn)行對(duì)比,確認(rèn)是否有不同之處。

? 出現(xiàn)異常時(shí),測(cè)試 USB 高速眼圖是否正常。

? 若眼圖測(cè)試未通過,可嘗試調(diào)節(jié)眼圖參數(shù)。

3.1.1.2 USB Device 基本功能異常排查步驟

? 多換幾個(gè) PC 主機(jī)做相同的測(cè)試,排除個(gè)別 PC 的問題。

? 多更換幾根 USB 線纜做相同的測(cè)試,排除個(gè)別 USB 線纜的問題。

? 確認(rèn) Device 驅(qū)動(dòng)是否加載成功,可通過如下方式:

(1)通過 Log。

[ 104.732695] insmod_device_driver [ 104.732695] device_chose finished!

(2)通過節(jié)點(diǎn)查看當(dāng)前 Role。

? 重新加載 Device 驅(qū)動(dòng),確認(rèn)此時(shí)功能是否恢復(fù)正常。

(1)重新插拔 USB 線。

(2)手動(dòng)切換到 Device 模式。

? 對(duì)比 SDK 代碼與最新發(fā)布的代碼或者補(bǔ)丁, 確認(rèn)代碼是否更新到最新。

? 同樣條件下,分別打印出功能異常板子和功能正常板子的相關(guān)寄存器,并進(jìn)行對(duì)比,確認(rèn)是否有異常。

? 出現(xiàn)異常時(shí),確認(rèn) USB 高速眼圖是否正常。

3.1.2 配置其他 gadget 功能前關(guān)閉 adb 功能時(shí)卻報(bào)異常的解決辦法

問題產(chǎn)生的原因是:僅執(zhí)行./etc/adb_conf.sh stop 只是強(qiáng)制殺死 adb 守護(hù)進(jìn)程,但 adb 功能鏈接仍存,當(dāng)配置其他 gadget 功能時(shí),便會(huì)復(fù)合 adb 鏈接導(dǎo)致異常,故在需要配置其他 gadget 功能時(shí),除了強(qiáng)制殺死 adb 守護(hù)進(jìn)程還須移除 adb 功能鏈接,在小機(jī)中操作步驟如下:

1、./etc/adb_conf.sh stop 2、umount /sys/kernel/config 3、rm -fr /sys/kernel/config/usb_gadget/g1/configs/c.1/ffs.adb

執(zhí)行以上操作,正常關(guān)閉 adb 后,根據(jù)需要的 gadget 功能,參考【附錄】章節(jié)進(jìn)行配置即可。

4 附錄

4.1 Linux-4.x/Linux-5.4 Gadget 配置示例

4.1.1 小機(jī)做 mass storage

dd if=/dev/zero of=/dev/a.bin bs=1M count=100 mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x18d1" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0001" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 echo /dev/a.bin > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ /sys/kernel/config/ usb_gadget/g1/configs/c.1/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

說明

如果需要增加 lun,在 functions/mass_storage.usb0 下:

mkdir lun.1

mkdir lun.2

4.1.2 小機(jī)做 cdrom

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0xa4ac" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 echo 1 > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/cdrom echo /tmp/phoenixcard.iso > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ lun.0/file ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ /sys/kernel/config/ usb_gadget/g1/configs/c.1/mass_storage.usb0 ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

說明

/tmp/phoenixcard.iso 根據(jù)實(shí)際情況更改。

4.1.4 小機(jī)做 UAC2

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1d61" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0101" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/uac2.usb0 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/uac2.usb0/ /sys/kernel/config/usb_gadget/ g1/configs/c.1/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.5 小機(jī)做 UVC

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x100d" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0 mkdir -p /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p echo 1280 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/wWidth echo 720 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/ wHeight echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/ dwFrameInterval echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/ dwDefaultFrameInterval echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p /dwMinBitRate echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p /dwMaxBitRate echo 1843200 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/ dwMaxVideoFrameBufferSize mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/class/fs ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/class/hs mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/control/class/fs/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/control/class/ss/ mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/ /sys/kernel/config/usb_gadget/g1 /configs/c.1/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.6 小機(jī)做 HID

mount -t configfs none /sys/kernel/config/ mkdir /sys/kernel/config/usb_gadget/g1 echo 0x0525 >/sys/kernel/config/usb_gadget/g1/idVendor echo 0xa4ac >/sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/hid.usb0 echo 512 >/sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_length echo -ne >/sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_desc mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 >/sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 >/sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

說明

report_desc 根據(jù)需求自定義。

4.1.7 小機(jī)做 rndis

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x200a" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/rndis.usb0 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/rndis.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/rndis.usb0 ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.8 小機(jī)做 acm

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0007" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/acm.usb0 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/acm.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/acm.usb0 ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.9 小機(jī)做 adb

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x18d1" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0002" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 echo "20080411" > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber echo "Android" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer mkdir /sys/kernel/config/usb_gadget/g1/functions/ffs.adb mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb/ /sys/kernel/config/usb_gadget/g1/ configs/c.1/ffs.adb mkdir /dev/usb-ffs mkdir /dev/usb-ffs/adb mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.10 小機(jī)做 mass storage+adb

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x18d1" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0003" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 echo "20080411" > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber echo "Android" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer mkdir /sys/kernel/config/usb_gadget/g1/functions/ffs.adb mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 echo ${BLOCK_PATH} > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ /sys/kernel/config/ usb_gadget/g1/configs/c.1/mass_storage.usb0 ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb/ /sys/kernel/config/usb_gadget/g1/ configs/c.1/ffs.adb mkdir /dev/usb-ffs mkdir /dev/usb-ffs/adb mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.11 小機(jī)做 uvc+uac1

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x100d" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0 mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0 mkdir -p /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p echo 1280 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/wWidth echo 720 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/wHeight echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwFrameInterval echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwDefaultFrameInterval echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMinBitRate echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxBitRate echo 1843200 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/class/fs ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/streaming/class/hs mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/control/class/fs/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/ config/usb_gadget/g1/functions/uvc.usb0/control/class/ss/ mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/ /sys/kernel/config/usb_gadget/g1 /configs/c.1/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.12 小機(jī)做 hid+cdrom

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0xa4ac" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/hid.usb0 mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 echo 512 >/sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_length echo -ne >/sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_desc ln -s /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/hid.usb0 echo 1 > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/cdrom echo /tmp/phoenixcard.iso > /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/mass_storage.usb0 ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC

4.1.13 小機(jī)做 rndis+adb

mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x18d1" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0010" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/ffs.adb mkdir /sys/kernel/config/usb_gadget/g1/functions/rndis.usb0 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 >/sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 >/sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 ln -s /sys/kernel/config/usb_gadget/g1/functions/rndis.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/rndis.usb0 ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ffs.adb mkdir /dev/usb-ffs mkdir /dev/usb-ffs/adb mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb/ ls/sys/class/udc/|xargs echo>/sys/kernel/config/usb_gadget/g1/UDC

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    4

    文章

    1468

    瀏覽量

    42873
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    8440

    瀏覽量

    284463
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11760

    瀏覽量

    219014
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    646

    瀏覽量

    35652
  • 開發(fā)指南
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    7900
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RK3562 單板機(jī) Linux-RT 系統(tǒng)開發(fā)指南:內(nèi)核配置、實(shí)時(shí)性優(yōu)化與案例詳解

    本文為創(chuàng)龍科技RK3562 單板機(jī) Linux-RT 開發(fā)指南,核心聚焦實(shí)時(shí)內(nèi)核的性能測(cè)試與開發(fā)應(yīng)用。內(nèi)容包括 LinuxLinux-
    的頭像 發(fā)表于 02-10 11:49 ?1.7w次閱讀
    RK3562 單板機(jī) <b class='flag-5'>Linux</b>-RT 系統(tǒng)<b class='flag-5'>開發(fā)指南</b>:內(nèi)核配置、實(shí)時(shí)性優(yōu)化與案例詳解

    C#上位機(jī)實(shí)戰(zhàn)開發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《C#上位機(jī)實(shí)戰(zhàn)開發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 01-11 17:15 ?6次下載

    DR1平臺(tái)Linux應(yīng)用開發(fā)指南:含GDB調(diào)試、Python及MQTT實(shí)戰(zhàn)

    本文為創(chuàng)龍科技DR1 系列評(píng)估板 Linux 應(yīng)用開發(fā)手冊(cè),系統(tǒng)講解開發(fā)環(huán)境搭建、GDB 調(diào)試、多類型應(yīng)用案例及 MQTT 通信實(shí)現(xiàn)。核心內(nèi)容包括 LinuxSDK 與工具鏈配置、GDB 遠(yuǎn)程調(diào)試
    的頭像 發(fā)表于 01-05 16:48 ?4562次閱讀
    DR1平臺(tái)<b class='flag-5'>Linux</b>應(yīng)用<b class='flag-5'>開發(fā)指南</b>:含GDB調(diào)試、Python及MQTT實(shí)戰(zhàn)

    EZ-USB? FX5 DVK (KIT_FX5_FMC_001) 套件開發(fā)指南

    EZ-USB? FX5 DVK (KIT_FX5_FMC_001) 套件開發(fā)指南 在當(dāng)今的電子技術(shù)領(lǐng)域,視頻和音頻的高速、穩(wěn)定傳輸是眾多應(yīng)用的關(guān)鍵需求。EZ-USB? FX5 DVK
    的頭像 發(fā)表于 12-18 15:20 ?417次閱讀

    電子工程師硬件設(shè)計(jì)開發(fā)指南

    電子工程師硬件設(shè)計(jì)開發(fā)指南 作為電子工程師,在硬件設(shè)計(jì)開發(fā)過程中,規(guī)范的文檔和清晰的設(shè)計(jì)思路至關(guān)重要。以下為大家詳細(xì)介紹硬件設(shè)計(jì)開發(fā)的相關(guān)要點(diǎn)。 文件下載: Amphenol Aerospace
    的頭像 發(fā)表于 12-10 15:05 ?526次閱讀

    基于安路DR1M90 FPSoC的Linux系統(tǒng)全流程開發(fā)指南(4)

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì)安路飛龍 DR1M90,詳述 Linux 系統(tǒng)開發(fā)流程:LinuxSDK 配置編譯、BOOT.bin(FSBL+U-Boot)開發(fā)、Kernel 與 Rootfs
    的頭像 發(fā)表于 11-30 15:46 ?2181次閱讀
    基于安路DR1M90 FPSoC的<b class='flag-5'>Linux</b>系統(tǒng)全流程<b class='flag-5'>開發(fā)指南</b>(4)

    基于安路DR1M90 FPSoC 的Linux 系統(tǒng)全流程開發(fā)指南(3)

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì)安路飛龍 DR1M90,詳述 Linux 系統(tǒng)開發(fā)流程:LinuxSDK 配置編譯、BOOT.bin(FSBL+U-Boot)開發(fā)、Kernel 與 Rootfs
    的頭像 發(fā)表于 11-26 17:01 ?318次閱讀
    基于安路DR1M90 FPSoC 的<b class='flag-5'>Linux</b> 系統(tǒng)全流程<b class='flag-5'>開發(fā)指南</b>(3)

    基于安路DR1M90 FPSoC 的Linux 系統(tǒng)全流程開發(fā)指南(1)

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì)安路飛龍 DR1M90,詳述 Linux 系統(tǒng)開發(fā)流程:LinuxSDK 配置編譯、BOOT.bin(FSBL+U-Boot)開發(fā)、Kernel 與 Rootfs
    的頭像 發(fā)表于 11-25 14:09 ?385次閱讀
    基于安路DR1M90 FPSoC 的<b class='flag-5'>Linux</b> 系統(tǒng)全流程<b class='flag-5'>開發(fā)指南</b>(1)

    避坑指南!RK3568開發(fā)板選型,這5點(diǎn)沒看清千萬別下手!(附迅為驅(qū)動(dòng)開發(fā)指南資源)

    避坑指南!RK3568開發(fā)板選型,這5點(diǎn)沒看清千萬別下手!(附迅為驅(qū)動(dòng)開發(fā)指南資源)
    的頭像 發(fā)表于 10-30 15:49 ?773次閱讀
    避坑<b class='flag-5'>指南</b>!RK3568<b class='flag-5'>開發(fā)</b>板選型,這5點(diǎn)沒看清千萬別下手!(附迅為驅(qū)動(dòng)<b class='flag-5'>開發(fā)指南</b>資源)

    【北京迅為】itop-3568開發(fā)板驅(qū)動(dòng)開發(fā)指南(重制版)

    iTOP-RK3568開發(fā)板驅(qū)動(dòng)開發(fā)指南目錄:前言學(xué)習(xí)方法Linux驅(qū)動(dòng)基礎(chǔ)第 1 章 你好!內(nèi)核源碼第 2 章 helloworld 驅(qū)動(dòng)實(shí)驗(yàn)第 4 章 驅(qū)動(dòng)模塊傳參實(shí)驗(yàn)第 5 章 內(nèi)核模塊符號(hào)
    發(fā)表于 10-30 15:48 ?37次下載

    中微愛芯AiP9P35X系列芯片開發(fā)指南

    中微愛芯為AiP9P35X系列芯片提供一份產(chǎn)品開發(fā)指南和一個(gè)可以供客戶調(diào)用的高可靠性庫文件,幫助用戶快速掌握芯片性能,降低用戶觸控按鍵開發(fā)難度和產(chǎn)品開發(fā)周期,提高開發(fā)效率。
    的頭像 發(fā)表于 09-08 16:20 ?2880次閱讀
    中微愛芯AiP9P35X系列芯片<b class='flag-5'>開發(fā)指南</b>

    中微愛芯AiP8F35XX系列觸摸芯片開發(fā)指南

    中微愛芯為AiP8F35XX系列芯片提供一份產(chǎn)品開發(fā)指南,幫助用戶快速掌握芯片性能,降低產(chǎn)品開發(fā)周期,提高開發(fā)效率。
    的頭像 發(fā)表于 08-25 16:42 ?4174次閱讀
    中微愛芯AiP8F35XX系列觸摸芯片<b class='flag-5'>開發(fā)指南</b>

    中微愛芯AiP8F32XX系列芯片開發(fā)指南

    中微愛芯為AiP8F32XX系列芯片提供一份產(chǎn)品開發(fā)指南,幫助用戶快速掌握芯片性能,降低產(chǎn)品開發(fā)周期,提高開發(fā)效率。
    的頭像 發(fā)表于 08-13 11:39 ?3984次閱讀
    中微愛芯AiP8F32XX系列芯片<b class='flag-5'>開發(fā)指南</b>

    從驅(qū)動(dòng)到應(yīng)用:RT-Thread環(huán)境下的SDIO開發(fā)指南

    目錄硬件介紹搭建開發(fā)環(huán)境配置SDIO驅(qū)動(dòng)掛載文件系統(tǒng)文件讀寫測(cè)試演示視頻源碼工程總結(jié)本文主要講述RT-Thread環(huán)境下的SDIO開發(fā)指南,基于MCXN947開發(fā)板。1硬件介紹本次測(cè)評(píng)的是SDIO
    的頭像 發(fā)表于 06-28 09:02 ?2811次閱讀
    從驅(qū)動(dòng)到應(yīng)用:RT-Thread環(huán)境下的SDIO<b class='flag-5'>開發(fā)指南</b>

    STM32F10xxx硬件開發(fā)指南

    官方STM32F10xxx硬件開發(fā)指南
    發(fā)表于 04-14 14:59 ?3次下載