日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

PCI 设备调试手段

發(fā)布時(shí)間:2023/12/19 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 PCI 设备调试手段 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Author: Younix
Platform: RK3399
OS: Android 6.0
Kernel: 4.4
Version: v2017.04

一PCI 設(shè)備調(diào)試手段
busybox lspci
pci 設(shè)備速度
二Sata 設(shè)備調(diào)試手段
查看分區(qū)信息
mount
三PCIe 轉(zhuǎn) Sata 小板調(diào)試步驟
1 打開(kāi) PCIe 設(shè)備驅(qū)動(dòng)
2 打開(kāi) SATA 設(shè)備驅(qū)動(dòng)
3 手動(dòng)掛載硬盤
4 實(shí)現(xiàn)自動(dòng)掛載
41 修改 fstab
42 修改 VOLD 添加對(duì) pcie 轉(zhuǎn) sata 設(shè)備的支持
四調(diào)試問(wèn)題匯總
1 PCIe 供電
2 mount 失敗
3 自動(dòng)掛載無(wú)效
一、PCI 設(shè)備調(diào)試手段
busybox lspci
lspci 命令查看 pci 設(shè)備。出現(xiàn)如下信息:

shell@rk3399_mid:/ $ lspci
shell@rk3399_mid:/ $ 0c:00.0 0100: 1000:0056 (rev 02)
1
2
如果是 Android 設(shè)備沒(méi)有移植 lspci 的可能需要通過(guò) busybox lspci 實(shí)現(xiàn)。

0c:00.0 表示含義為 bus number: device number.function number 三者組合成一個(gè) 16bit 的識(shí)別碼
1. bus number:8bits 最多連接到 256 個(gè) bus
2. device number:6bits 最多連接到 32 種裝置
3. function number:3bits 最多每種裝置有 8 種功能
0100: 1000:0056 表示含義為 Class ID: Vendor ID Device ID

pci 設(shè)備速度
通過(guò)如下命令可以獲取 pci 的速度

shell@rk3399_mid:/ $ lspci -n -d 1000:0056 -vvv | grep -i width
1
二、Sata 設(shè)備調(diào)試手段
查看分區(qū)信息
cat /proc/partitions
1
mount
mount
umount
1
2
三、PCIe 轉(zhuǎn) Sata 小板調(diào)試步驟
3.1 打開(kāi) PCIe 設(shè)備驅(qū)動(dòng)
在 menuconfig 中
打開(kāi)相應(yīng)的調(diào)試宏:BUS Support -> PCI Debugging
打開(kāi)相應(yīng) PCIe 總線驅(qū)動(dòng): BUS Support -> PCI Support
打開(kāi)其熱插拔功能(Hot Plug):BUS Support -> Support for PCI Hotplug

在 PCIe 設(shè)備沒(méi)有插上的情況下開(kāi)機(jī),得到如下 log

[1.157185] rockchip-pcie f8000000.pcie: no vpcie3v3 regulator found
[1.157207] rockchip-pcie f8000000.pcie: no vpcie1v8 regulator found
[1.157223] rockchip-pcie f8000000.pcie: n vpcie0v9 regulator found
[1.691995] rockchip-pcie f8000000.pcie: PCIe link training gen1 timeout!
[1.692059] rockchip-pcie: probe of f8000000.pcie failed with error -110
1
2
3
4
5
我們 PCIe 設(shè)備還未連接,出現(xiàn)如上 Log 為正常。
3. 將 PCIe 的設(shè)備插在板子上后。利用 busybox lspci 查看現(xiàn)在的 pci 設(shè)備。

shell@rk3399_mid:/ $ busybox lspci
00:00.0 Class 0604: 17cd:0000
01:00.0 Class 0106: 1b21:0612
1
2
3
可以看到有幾個(gè) ID,可以根據(jù) ID 確認(rèn)設(shè)備是否被識(shí)別到。
比如我們根據(jù)官方的 datasheet 知道,1b21 即 ASMEDIA 廠商的 Vendor ID,0612 即 Device ID。

之后就是加載設(shè)備驅(qū)動(dòng)的時(shí)候,會(huì)根據(jù) VENDOR_ID 進(jìn)行匹配。識(shí)別成功后才能加載 probe。

如果沒(méi)有進(jìn)入 probe ,有一種情況是設(shè)備已經(jīng)被一個(gè)驅(qū)動(dòng)占有了,找到這個(gè)設(shè)備使用的驅(qū)動(dòng),并且去除即可。

3.2 打開(kāi) SATA 設(shè)備驅(qū)動(dòng)
對(duì)于調(diào)試轉(zhuǎn) SATA 設(shè)備,還需要提供設(shè)備驅(qū)動(dòng)的支持:

打開(kāi) PCIe 轉(zhuǎn) SATA 小板的設(shè)備驅(qū)動(dòng):Device Driver -> Serial ATA and Parallel ATA driverrs(libata) -> AHCI SATA support

確認(rèn)方法為

# ls dev/block/sd*
sda
sda1
1
2
3
可以看到多出來(lái)了 sda 與 sda1,sda 即為 sata 硬盤,sda[n] 即為其分區(qū)號(hào)。

3.3 手動(dòng)掛載硬盤
在生成設(shè)備節(jié)點(diǎn)后將硬盤的設(shè)備節(jié)點(diǎn)掛載到我們系統(tǒng)的目錄上。
首先查看產(chǎn)生的設(shè)備節(jié)點(diǎn)相關(guān)信息。

shell@rk3399_mid:/ $su
shell@rk3399_mid:/ $ls dev/block/sd*
shell@rk3399_mid:/ $sda sda1 sda2 sda3
1
2
3
可以看到我的硬盤有三個(gè)分區(qū)。

接下來(lái)手動(dòng)掛載。

shell@rk3399_mid:/ $mount /dev/block/sdb1 /mnt/Younix/
1
正常情況下,這樣操作便可以正常掛載。
但是也有可能會(huì)產(chǎn)生一些報(bào)錯(cuò),在后面 第四節(jié) 常見(jiàn)調(diào)試問(wèn)題 中,我們?cè)賮?lái)描述。

3.4 實(shí)現(xiàn)自動(dòng)掛載
3.4.1 修改 fstab
diff --git a/device/rockchip/rk3399/fstab.rk30board.bootmode.emmc b/device/rockchip/rk3399/fstab.rk30board.bootmode.emmc
index b2d4c75..059e73b 100755
--- a/device/rockchip/rk3399/fstab.rk30board.bootmode.emmc
+++ b/device/rockchip/rk3399/fstab.rk30board.bootmode.emmc
@@ -22,4 +22,7 @@
# for usb3.0
/devices/platform/usb@*/*.dwc3* auto vfat defaults voldmanaged=usb:auto
+# for pcie
+/devices/platform/*.pcie* auto vfat defaults voldmanaged=pcie:auto
+
/dev/block/zram0 none swap defaults zramsize=533413200
1
2
3
4
5
6
7
8
9
10
11
3.4.2 修改 VOLD 添加對(duì) pcie 轉(zhuǎn) sata 設(shè)備的支持
diff --git a/system/vold/Disk.cpp b/system/vold/Disk.cpp
index 7daa9b7..97b7cd8 100755
--- a/system/vold/Disk.cpp
+++ b/system/vold/Disk.cpp
@@ -65,6 +65,7 @@ static const unsigned int kMajorBlockScsiN = 133;
static const unsigned int kMajorBlockScsiO = 134;
static const unsigned int kMajorBlockScsiP = 135;
static const unsigned int kMajorBlockMmc = 179;
+static const unsigned int kMajorBlockPcie = 259;
static const char* kGptBasicData = "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7";
static const char* kGptAndroidMeta = "19A710A2-B3CA-11E4-B026-10604B889DCF";
@@ -230,6 +231,16 @@ status_t Disk::readMetadata() {
}
break;
}
+ case kMajorBlockPcie: {
+ std::string path(mSysPath + "/device/device/vendor");
+ std::string tmp;
+ if (!ReadFileToString(path, &tmp)) {
+ PLOG(WARNING) << "Failed to read vendor from " << path;
+ return -errno;
+ }
+ mLabel = tmp;
+ break;
+ }
default: {
LOG(WARNING) << "Unsupported block major type" << major(mDevice);
return -ENOTSUP;
@@ -301,6 +312,7 @@ status_t Disk::readPartitions() {
case 0x0b: // W95 FAT32 (LBA)
case 0x0c: // W95 FAT32 (LBA)
case 0x0e: // W95 FAT16 (LBA)
+   case 0x83: // W95 FAT16 (LBA)
createPublicVolume(partDevice);
validParts = true;
break;
@@ -512,6 +524,14 @@ int Disk::getMaxMinors() {
}
return atoi(tmp.c_str());
}
+ case kMajorBlockPcie: {
+ std::string tmp;
+ if (!ReadFileToString(kSysfsMmcMaxMinors, &tmp)) {
+ LOG(ERROR) << "Failed to read max minors";
+ return -errno;
+ }
+ return atoi(tmp.c_str());
+ }
}
LOG(ERROR) << "Unsupported block major type " << major(mDevice);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
四、調(diào)試問(wèn)題匯總
4.1 PCIe 供電
PCIe 供電沒(méi)有打開(kāi)的情況下,需要在 dts 添加 power supply:

index 4763727..677ed9d 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
@@ -179,6 +179,17 @@
rockchip,pwm_id= <2>;
rockchip,pwm_voltage = <1000000>;
};
+
+ vcc3v3_3g: vcc3v3-3g-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ regulator-always-on;
+ regulator-boot-on;
+ gpio = <&gpio0 2 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie_3g_drv>;
+ regulator-name = "vcc3v3_3g";
+ };
};
& cpu_l0 {
@@ -511,6 +522,7 @@
num-lanes = <4>;
pinctrl-names = "default";
pinctrl-0 = <&pcie_clkreqn>;
+ phy-supply = <&vcc3v3_3g>;
status = "okay";
};
@@ -658,6 +670,14 @@
};
& pinctrl {
+
+ pcie {
+ pcie_3g_drv: pcie-3g-drv {
+ rockchip,pins =
+ <0 2 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
4.2 mount 失敗
我在手動(dòng)掛載硬盤的時(shí)候,碰到了這樣的問(wèn)題。

[ 167.457458] F2FS-fs (sda1): Magic Mismatch, valid(0xf2f52010) - read(0x0)
[ 167.457483] F2FS-fs (sda1): Can't find valid F2FS filesystem in 2th superblock
1
2
這是因?yàn)槟J(rèn)對(duì)硬盤的文件系統(tǒng)不支持。
利用電腦嘗試將硬盤格式化為 Fat 格式 或者 ext4 格式的系統(tǒng)后,重新 Mount ,問(wèn)題解決。

4.3 自動(dòng)掛載無(wú)效
剛修改完 fstab 的時(shí)候,編譯打包燒錄進(jìn)機(jī)器發(fā)現(xiàn)無(wú)法自動(dòng)掛載。
檢查機(jī)器根目錄下的 fstab.rk30board.bootmode.emmc 文件,發(fā)現(xiàn)我添加的 for pcie 的信息并沒(méi)有添加成功。
對(duì)應(yīng) out/target/product/rk3399_mid/root/fstab* 文件中確實(shí)沒(méi)有我的修改信息。

進(jìn)一步去 device/rockchip/rk3399 下搜索 fstab 文件的拷貝規(guī)則。
在 device.mk 中查到結(jié)果。

55 ifeq ($(BUILD_WITH_FORCEENCRYPT),true)
56 PRODUCT_COPY_FILES +=
57 $(LOCAL_PATH)/fstab.rk30board.bootmode.forceencrypt.unknown:root/fstab.rk30board.bootmode.unknown
58 $(LOCAL_PATH)/fstab.rk30board.bootmode.forceencrypt.emmc:root/fstab.rk30board.bootmode.emmc
59 else
60 PRODUCT_COPY_FILES +=
61 $(LOCAL_PATH)/fstab.rk30board.bootmode.unknown:root/fstab.rk30board.bootmode.unknown
62 $(LOCAL_PATH)/fstab.rk30board.bootmode.emmc:root/fstab.rk30board.bootmode.emmc
63 endif
1
2
3
4
5
6
7
8
9
是因?yàn)閷?duì)于 mid 工程 有定義BUILD_WITH_FORCEENCRYPT
當(dāng)定義這個(gè)宏的時(shí)候,根目錄下采用的是 fstab.rk30board.bootmode.forceencrypt.emmc,會(huì)將其拷貝到機(jī)器根目錄下并重命名為 fstab.rk30board.bootmode.emmc。

所以應(yīng)該在 fstab.rk30board.bootmode.forceencrypt.emmc 文件中修改,而我是想當(dāng)然的在 fstab.rk30board.bootmode.emmc 中修改的。
---------------------
作者:Younix臟羊
來(lái)源:CSDN
原文:https://blog.csdn.net/dearsq/article/details/76857052
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!

總結(jié)

以上是生活随笔為你收集整理的PCI 设备调试手段的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。