How to edit kernel's command line

tx2 & JetPack 4.1.1
I want disable PCIe ASPM, and find the follow link, but i do not know how to edit kernel’s command line
[url]https://devtalk.nvidia.com/default/topic/1030107/jetson-tx1/how-to-disable-the-pcie-aspm-on-tx1-/[/url]

Hi,

You could add it to the p2771-0000.conf.common if it is TX2.

229 ROOTFSSIZE=28GiB;
230 <b>CMDLINE_ADD="console=ttyS0,115200n8 console=tty0 OS=l4t fbcon=map:0 net.ifnames=0";</b>
231 target_board="t186ref";

is there i need rebuild the kernel?
Is there a simpler way?

No you don’t need to rebuild the kernel.
Just need to reflash the board.

Tip: Device tree build is included with kernel source because what is essentially a device tree “API” version must match the drivers. The two are actually independent builds, but are packaged together for convenience. A target of “make dtbs” depends on kernel config prior to build, but it doesn’t actually build a kernel or module.

Any tips on how to do this on the Jetson Nano? Which file do I need to edit? Where is it/how do I do it?

Trying to get the 3165 Intel Wifi working

What do you specifically want to change? There are multiple ways to go about most changes, some easier than others. WiFi tends to have other (non-device-tree) issues, e.g., some WiFi needs an extra firmware package (e.g., see https://www.intel.com/content/www/us/en/support/articles/000005511/network-and-i-o/wireless-networking.html).

I do not personally use the WiFi so there isn’t much I can say about configuring a specific WiFi solution, but unless this is something built in to a custom carrier board, then device tree changes would not be needed. If this is a WiFi question, then probably a new thread on that topic would be the way to start (providing the output of “iwconfig”, “ifconfig”, and “cat /proc/cmdline” in the new thread).

I am trying to disable PCIe ASPM as other users reported that got their Intel WiFi 3165 card working

I have no knowledge of that particular WiFi, but there is a good chance ASPM is unrelated (this tends to be a problem when some devices on PCI are put to sleep, and then told to wake back up). If the device never worked, then the issue is different than a device which works, but then over time stops working.

Disabling ASPM could be a bigger effort and turn out to not be required, so I will suggest posting a new thread on the particular WiFi card, and adding details such as which L4T release is flashed (“head -n 1 /etc/nv_tegra_release”), output from “ifconfig”, “iwconfig”, “rfkill”, boot logs where relevant to the WiFi, so on. Chances are that the answer will be simpler than ASPM.

I’ll do that! Thanks!

@linuxdev turning off ASPM seemed to solve it for the user below?

Some of the details for updating a device tree have changed depending on the L4T version you have installed. Closely related, methods for passing an option to the kernel command line have also changed. Methods of passing arguments to individual drivers which are in module format are standard with other Ubuntu releases.

That said, on R32.1, this is probably (on the host side prior to flash) “tegra186-quill-p3310-1000-c03-00-base.dts” (when compiled the “.dts” source becomes “.dtb” binary, so full name, as flashed, is “tegra186-quill-p3310-1000-c03-00-base.dtb”, and the dtb is what is flashed). You can verify this for your specific case:

less /proc/device-tree/nvidia,dtsfilename

On the host PC, in the “Linux_for_Tegra/” directory, you will find the original at:

Linux_for_Tegra/kernel/dtb/tegra186-quill-p3310-1000-c03-00-base.dtb

If you replace this (be very sure to save an unmodified copy first), and then flash, this will provide the changes.

As an example, you could decompile this:

dtc -I dtb -O dts -o modified_tegra186-quill-p3310-1000-c03-00-base.dts tegra186-quill-p3310-1000-c03-00-base.dtb

This does not modify the “.dtb”, but does produce a source version of this:
modified_tegra186-quill-p3310-1000-c03-00-base.dts

You could then edit node “chosen->bootargs”. Compile a binary form of this:

dtc -I dts -O dtb -o tegra186-quill-p3310-1000-c03-00-base.dts modified_tegra186-quill-p3310-1000-c03-00-base.dtb

Now “tegra186-quill-p3310-1000-c03-00-base.dtb”, and this dtb will have the bootargs node modified, but otherwise this will be a duplicate of the original "> dtc -I dtb -O dts -o “tegra186-quill-p3310-1000-c03-00-base.dtb”. Copy your modified version to “Linux_for_Tegra/kernel/dtb/tegra186-quill-p3310-1000-c03-00-base.dtb”, and flash.

Note that a normal flash overwrites your rootfs partition. Someone else may know how to flash just the dtb on R32.1, but the “-d” option only names a file and does not actually prevent the rootfs from being overwritten.

One way to deal with saving your rootfs is to clone it first, and use the clone during the flash. This takes a lot of time, but is ultimately the most secure way to know you are not going to lose content. Any flash could use the clone for content, and although rootfs would be flashed again, it would be flashed with the same content as is already there.

Anyone here tested a way to flash just the device tree without touching rootfs?

NOTE: This tells you in general how to use the existing tree to modify the kernel command line arguments. I am assuming you already know what kernel command line you want to add. There are some releases where you could also do this via editing “/boot/extlinux/extlinux.conf”, but so far as I know R32.1 does not work with this (someone else may know for certain).

2 Likes

dtc -I dts -O dtb -o modified_tegra186-quill-p3310-1000-c03-00-base.dtb tegra186-quill-p3310-1000-c03-00-base.dts

This would take the source code file “tegra186-quill-p3310-1000-c03-00-base.dts” and create a binary compiled version as “modified_tegra186-quill-p3310-1000-c03-00-base.dtb”. If this is the correct content, then you could overwrite the original “tegra186-quill-p3310-1000-c03-00-base.dtb” (after saving a safe original copy) and flash. The result would be your changes taking place.

If the changes are to “chosen->bootargs”, then after boot you would see that change from this command which shows the kernel command line:
cat /proc/cmdline