On my device, the Ethernet nodes in JP4.6 are:
eth0: nvethernet
eth1: igb i210
But in JP5.1.2, they are:
eth0: igb i210
eth1: nvethernet
On my device, the Ethernet nodes in JP4.6 are:
eth0: nvethernet
eth1: igb i210
But in JP5.1.2, they are:
eth0: igb i210
eth1: nvethernet
Hi,
The deviation may be from different kernel version. JP4.6 is Kernel 4.9 and JP 5.1.2 is K5.10. The order of initializing driver may be different between the two versions.
Just to emphasize, those names are from what @DaneLLL mentions: Order of enumerating. There would be a learning curve, but you could perhaps use the udev
system to change names. udev
is typically used for things like customizing a USB device name, but it should work on the Ethernet devices. Whatever you read online regarding udev
and Ubuntu device naming will apply to the Jetson (it isn’t an “NVIDIA thing” that renamed the devices).
I know how to set up udev, but could you provide tips on how to check or modify the kernel driver order of enumerating that you mentioned?
Thank you for your reply.
This is kind of a backwards way of describing this, but I cannot give an exact answer. What follows might be useful.
The Linux kernel is just a program, like many others. It does run on bare metal, but it isn’t that unusual in the sense that it inherits an environment, and it takes arguments when it runs. The Linux kernel starts out with only one purpose: To run one program. That program is “init
”.
On Ubuntu (and many modern systems) init
is a symbolic link to systemd
. The user accessible method of talking to systemd
is via the systemctl
program. It is systemd
(init
), which has PID 1 (the kernel is PID 0). It is systemd
that chooses the order to run various startup stages or steps.
systemd
tries to make init
somewhat more modular. Older init
was just a bunch of bash
scripts. To see what systemd
thinks it is doing:
systemctl list-units
Each unit can be a target or requirement. The multi-user.target
is the text-mode multi-user target. Just for kicks, filter for target:
systemctl list-units | grep -i target
One of those will list networking as a requirement. Check:
systemctl list-units | grep -i target | grep -i network
If you find the specific target which initializes the Ethernet, then you have what you want. Be careful though since you might find a PCI device unit as well, and that unit might change order if the network devices are PCI. I don’t know what systemd
has as its order, but to directly change the order, you would have to change the correct unit (which udev
is designed to do dynamically).
You might also note that files in “/etc/systemd/
” are part of how systemd
finds the order of accessing parts. Symbolic links are the usual method, and those point to standard versions of files. You could in fact copy the real file into the “/etc/systemd/
” location, and then edit the copy. The system would then use your specs. Reverting would require changing back to the symbolic link of the unmodified file. It is “somewhat” safe to edit some of the files in “/etc/systemd/
” as long as you are only editing a copy and not the original system file. It is Ubuntu that chose most of what is there.
You can of course enable and disable units. Logs could probably be used to figure out the order of units, but I have never tried (I only enable or disable, stop or start, which does not require editing files).
Overall, the side effect is that the order of enumerating in the kernel picks the number. init
(systemd
) presents the devices for enumeration, so you’d want to present the devices in a reverse order. Or use udev
to edit after the fact.
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.