第一步:我修改了目录Linux_for_Tegra/source/public/kernel/kernel-5.10/arch/arm64/config 下的defconfig文件,修改如下

第二步:我修改了目录Linux_for_Tegra/source/public/hardware/nvidia/soc/t23x/kernel-dts/tegra234-soc下tegra34-soc-pcie.dtsi文件,把节点 /* C5 X8 */ pcie_c5_ep: pcie_ep@141a0000 中的iommu相关内容注释了。
/* C5 X8 */
pcie_c5_ep: pcie_ep@141a0000 {
compatible = "nvidia,tegra234-pcie-ep", "snps,dw-pcie";
power-domains = <&bpmp TEGRA234_POWER_DOMAIN_PCIEX8A>;
reg = <0x00 0x141a0000 0x0 0x00020000 /* appl registers (128K) */
0x00 0x3a040000 0x0 0x00040000 /* iATU_DMA reg space (256K) */
0x00 0x3a080000 0x0 0x00040000 /* DBI space (256K) */
0x27 0x40000000 0x4 0x00000000>; /* Address Space (16G) */
reg-names = "appl", "atu_dma", "dbi", "addr_space";
#address-cells = <3>;
#size-cells = <2>;
status = "disabled";
num-lanes = <8>;
clocks = <&bpmp_clks TEGRA234_CLK_PEX1_C5_CORE>,
<&bpmp_clks TEGRA234_CLK_PEX1_C5_CORE_M>;
clock-names = "core", "core_m";
resets = <&bpmp_resets TEGRA234_RESET_PEX1_CORE_5_APB>,
<&bpmp_resets TEGRA234_RESET_PEX1_CORE_5>;
reset-names = "apb", "core";
pinctrl-names = "default";
pinctrl-0 = <&pex_rst_c5_in_state>;
interrupts = <0 53 0x04>; /* controller interrupt */
interrupt-names = "intr";
nvidia,dvfs-tbl = < 204000000 204000000 204000000 204000000
204000000 204000000 204000000 665600000
204000000 204000000 665600000 1600000000
204000000 665600000 1600000000 2133000000 >;
nvidia,host1x = <&host1x>;
nvidia,enable-ext-refclk;
nvidia,max-speed = <4>;
nvidia,bar0-size = <0x100000>; /* 1 MB */
nvidia,device-id = /bits/ 16 <0x229B>;
nvidia,controller-id = <&bpmp 0x5>;
nvidia,aux-clk-freq = <0x13>;
nvidia,disable-aspm-states = <0xf>;
nvidia,aspm-cmrt = <0x3C>;
nvidia,aspm-pwr-on-t = <0x14>;
nvidia,aspm-l0s-entrance-latency = <0x3>;
nvidia,aspm-l1-entrance-latency = <0x5>;
num-ib-windows = <2>;
num-ob-windows = <8>;
//iommus = <&smmu_niso0 TEGRA_SID_NISO0_PCIE5>;
//iommu-map = <0x0 &smmu_niso0 TEGRA_SID_NISO0_PCIE5 0x1000>;
msi-parent = <&gic_v2m TEGRA_SID_NISO0_PCIE5>;
msi-map = <0x0 &gic_v2m TEGRA_SID_NISO0_PCIE5 0x1000>;
//dma-coherent;
//iommu-map-mask = <0x0>;
nvidia,cfg-link-cap-l1sub = <0x1c4>;
nvidia,cap-pl16g-status = <0x174>;
nvidia,cap-pl16g-cap-off = <0x188>;
nvidia,event-cntr-ctrl = <0x1d8>;
nvidia,event-cntr-data = <0x1dc>;
nvidia,dl-feature-cap = <0x30c>;
nvidia,ptm-cap-off = <0x318>;
interconnects = <&tegra_icc TEGRA_ICC_PCIE_5 &tegra_icc TEGRA_ICC_PRIMARY>;
interconnect-names = "icc_bwmgr";
nvidia,bpmp = <&bpmp 5>;
nvidia,aspm-cmrt-us = <60>;
nvidia,aspm-pwr-on-t-us = <20>;
nvidia,aspm-l0s-entrance-latency-us = <3>;
};
第三步:进行内核编译,步骤如下:
3.1 配置编译环境变量
export CROSS_COMPILE_AARCH64_PATH=/usr
export CROSS_COMPILE_AARCH64=/usr/bin/aarch64-linux-gnu-
3.2 创建内核输出文件夹
mkdir kernel_out
3.3 编译内核
Linux_for_Tegra/source/public$ ./nvbuild.sh -o $PWD/kernel_out
3.4 将新编译好的 Image 和 dtb 文件替换至烧录位置
cp Image ~/Linux_for_Tegra/kernel/Image
cp dts/* ~/Linux_for_Tegra/kernel/dtb/ -
3.5 安装 kernel modules
sudo make ARCH=arm64 O=../../kernel_out modules_install INSTALL_MOD_PATH=~/kernel_moudules/
3.6 打包modules
~/kernel_moudules/$ sudo tar --owner root --group root -cjf kernel_supplements.tbz2 lib/modules
3.7 替换kernel_supplements.tbz2
sudo cp kernel_supplements.tbz2 ~/Linux_for_Tegra/kernel_supplements.tbz2
3.8 执行 apply_binaries.sh 脚本
~Linux_for_Tegra$ sudo ./apply_binaries.sh
3.9 Jetson Orin Nano 触发recovery模式,烧录固件
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 -c tools/kernel_flash/flash_l4t_external.xml -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml" --showlogs --network usb0 jetson-orin-nano-devkit internal
但是最后我在目标机器/proc/device-tree/pcie@140a0000/下仍然能够看到iommu,如下:
请问是我哪一步操作出现了问题吗?




