PCI intel

Hello,

Actually, I am working with the jetson TX2.
I capture images from Gige camera (single Gige). As there is only 1 ethernet port on the jetson, I can´t use the camera in dual Gige. That why I need a PCI, and I am inetrested with the intel i350-t4, with 4 ethernet ports.

Do you know if the jetson is compatible with that PCI ?

Thank you,
Regards

From what I can see it appears the IGB drivers work for this card. However, other things can go wrong, but it appears this should work. Do keep in mind there may be power requirements for a high end quad port PCIe ethernet card…I doubt it would be a problem, but it could be.

If you see “=y” or “=m” from this, then probably you don’t even need to add drivers (though you probably will have to add configuration either in the TX2 or in a router):

gunzip < /proc/config.gz | egrep 'CONFIG_IGB'

Duplicate of:
https://devtalk.nvidia.com/default/topic/1073008/jetson-tx2/does-jetson-tx2-support-intel-i350-t4-/

Ok I see …
And have you some idea about the hardware issues ? Because apparently, the Intel card pull down the i2c lines and cause the system issue on our board. I should mask out the I2C pin. In my case, will I have to mask those pins (2.2.7, p.33) ?

file:///home/jetson/Downloads/ethernet-controller-i350-datasheet.pdf

I obtain those lines from that command :

CONFIG_IGB=y
CONFIG_IGB_HWMON=y
CONFIG_IGBVF=y

The driver seems to bee already installed.

Thank you a lot for your help !

With those features “=y” it implies you wouldn’t even need to enable drivers. I did see in the other thread a topic about the i2c lines by @WayneWWW:
https://devtalk.nvidia.com/default/topic/1073008/jetson-tx2/does-jetson-tx2-support-intel-i350-t4-/post/5436100/#5436100

You’ll probably want to continue in the other thread.

Hello,

I received the PCI, and it works. Apparently, no hardware issues, and it seems to be ok with the power.

I have an other problem. I need to use dual Gige camera. To configure the network, first, I use :

jetson@jetson-desktop:~$ sudo ip link add mybond type bond
[sudo] password for jetson:
RTNETLINK answers: Operation not supported

How can I solve that problem ?

Thank you for your help !

In this case this will be the same as any other Ubuntu network configuration, and so other docs on the internet will apply. The default is that each network interface expects a router and will use DHCP to get the address from the router. Multiple interfaces could get a bit complicated though on a single router, and you might need to specify non-overlapping network/netmask combinations (something you would configure on the router itself with admin access).

Alternatively, you could create statically assigned addresses, e.g., through a tool like “nm-connection-editor”.

Much would depend on how your cameras set up their addresses.

Hello linuxdev,

Thank you for your answer.

Actually, the camera´s provider set the camera with the following commands :

ip link add mybond type bond
ip addr add dev mybond 192.168.3.1/24
ip link set mybond up
ip link set eth4 down
ip link set eth4 master mybond
ip link set eth3 down
ip link set eth3 master mybond
ip link set mybond mmtu 90000

With the first command, I have the following message :

sudo ip link add mybond type bond
[sudo] password for jetson:
#RTNETLINK answers: Operation not supported

I modified some parameters in the kernel :

locate /.config | grep kernel
/usr/src/linux-headers-4.9.140-tegra-linux_x86_64/kernel-4.9/.config
/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/.config

Why is there 2 files .config ?

I add those parameters in the both files :

CONFIG_NETFILTER_NETLINK=y
CONFIG_NETFILTER_NETLINK_QUEUE=y
CONFIG_NETFILTER_NETLINK_LOG=y
CONFIG_NF_CT_NETLINK=y
CONFIG_SCSI_NETLINK=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_SCHED=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_NETFILTER_XT_TARGET_MARK=y

I always have the same issues.

I checked if the bonding module is enable :
-desktop:~$ sudo modinfo bonding
[sudo] password for jetson:
#modinfo: ERROR: Module bonding not found.
jetson@jetson-desktop:~$ modprobe --first-time bonding
modprobe: FATAL: Module bonding not found in directory /lib/modules/4.9.140-tegra

Apparently, the module is not installed. I have no idea how to solve it, because it should be installed …

Many thanks !

There should be only one kernel source used at any given time. Having two “.config” in two source locations would have undefined issues. If you were lucky and both were the same source code, and the output location were to somewhere other than the source directory, then it might work.

Regarding:
/usr/src/linux-headers-4.9.140-tegra-linux_x86_64/kernel-4.9/.config
/usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/.config
…your system might have more than one kernel header location, in part because there may at times be more than one configured set of headers (not necessarily for the Jetson, but generally for Linux systems where more than one boot option is installed this is common). At any given compile time of any kernel there should be only one “.config” used.

Bonding is something which needs to be supported in the kernel through options, and as such might need the kernel and/or modules to be modified to support this. However, most IP cameras are just devices and I have doubts that the bonding is actually required unless there is something unusual about the cameras. It might be better to find out more about the camera prior to spending time building kernels.

Regarding the “192.168.3.1/24”, this tends to be something to configure a NIC with on a host PC, and not something to set up a specific device/camera. I say this because an end device (such as an IP camera) would tend to have only one address, and the “/24” implies an entire subnet.

If you ran a command to set a network and netmask combination aimed at the Jetson, then it might have problems with this depending on both hardware and any previous settings. If this is aimed at the camera, then the camera is unusual.

Does the manufacturer of the camera provide a default address and/or netmaks for the camera itself? If “192.168.3.1” applies to a camera, then the Jetson would need a NIC with the “192.168.3.1/24” subnet set up in order to be able to reach the “192.168.3.1” address (and this is fairly simple in most cases). What information does the camera have so far as its actual IP address by default? Or does this camera use DHCP by default?

What I’m working towards is to have an address/netmask combination on the Jetson which overlaps with the camera device address so that the camera can be reached. This can be worked on without any kernel modification.

Hi,

Thank for your answer !
Ok I understand … And in that case, how know which one is launched ? I suppose that it is /usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/kernel-4.9/.config, but I didn’t find informations.

The camera’s manufacturer provide a software, which set a persistant IP to the camera, if the camera is recognized in the network.
By default, the adress 192.162.20.3.10. When I start the jetson, I have to set the ip adress as well as the netmask of jetson. There is no DHCP.

I understand what you say. I already have a code which works in single Gige. The camera sends image through datagram socket (UDP). With the manufacturer’s configuration, I don’t have to change my code, because the camera would adapt to rebuild the datagram socket. I am afraid that I would have to do modifications with your proposal …

I have tried to to handle the kernel, from pages :
Welcome — Jetson Linux<br/>Developer Guide 34.1 documentation
Internet bonding possible in jetson nano ? - #10 by WayneWWW

I have a problem with ./source_sync.sh. The file is not in my jetson. The only I found about that is : reinstall everything from sdkmanager. I would like to find an alternative …

Many thanks for your help !

Knowing which set of headers will be used depends on the Makefile and perhaps Kconfig. Often the directory is one of convention based on the results of “uname -r”, but at other times it might be based on package names. For a custom outside driver the relevant location of headers and/or source might be yet something else. Running the build and logging it, followed by searching for the two locations would be the real test.

Is it correct that you have two cameras? I assume “192.162.20.3.10” is a typographic error since that isn’t a valid address. So I will guess and assume it is really “192.168.3.10”, but adjust for your case (and you may want to post what the actual address is). Are both cameras at the same address? This would lead to needing extra steps and changing the address of one of the cameras to prevent collisions of two cameras replying at the same time.

The Jetson can have a manually assigned address/netmask to handle the rest so long as there is no router involved. If the Jetson is being forwarded by the host PC, then if the host PC itself is on a router, then the Jetson is probably using the same subnet and you would need to reserve some addresses in the router to prevent problems. More needs to be understood about your network topology. Specifically, is there a separate ethernet on your PC from the ethernet which connects the PC to the internet?

In combination with knowing how things are physically connected, and where routers are, and the exact IP address of each camera, it would be important for you to post the output of these commands from the Jetson and the host PC:
route
ifconfig

Hi,

Ok great, thank you. I will test.

Ohh sorry, yes, the IP adresse is “192.168.3.10”.
I just have one camera. Actually, I can use the camera in single Gige or Dual Gige. In single Gige, the camera is able to send an image to the jetson every 400ms. In dual Gige, every 200ms, that is why it is very interesting for my application (I am working on image processing, and I need to acquire image as fast as possible).

The camera is connected directly to the jetson. I don’t use a host computer to develop (not yet, but the most comprehensive tools seems to be nsight nvidia, and I will have to use the GPU …).
So, ethernet port of the jetson is connected to the camera directly. As the camera has 2 ethernets ports, thanks to the PCI, I will have to ethernet connected from the jetson to the camera (I have 5 ethernets ports on the jetson with the PCI). So I don’t need to think about the network topology, and the jetson is connected to internet by wifi.

In single Gige, to connect the camera I just need to enter the following command :

sudo ifconfig eth0 192.168.3.9 netmask 255.255.255.0 mtu 9000

And when I have tried to connect the camera in dual Gige, the manufacturer give the following command :

ip link add mybond type bond
ip addr add dev mybond 192.168.3.1/24
ip link set mybond up
ip link set eth4 down
ip link set eth4 master mybond
ip link set eth3 down
ip link set eth3 master mybond
ip link set mybond mmtu 90000

The output of the first command is :

sudo ip link add mybond type bond
[sudo] password for jetson:
#RTNETLINK answers: Operation not supported

I tried to connect the camera with an ethernet port from the PCI, and it works well.

I hope that my situation is more clear now.

Thank you !

The ability to use dual gigabit networks is why the bonding was seen earlier (until now it seemed odd to see bonding). This is an additional setup step and I doubt bonding is available by default without some setup. The first step would be to make sure the camera works on a single gigabit network with a single address, and to then add in the second network. The ability to use bonding will probably require both building either a new kernel or kernel modules, plus some user space software. I have not actually added bonding before, so my ability to help on the non-kernel parts will be limited. However, getting the camera working first with a single gigabit network would be required before working on bonding.

If the i2c questions about getting the Intel NIC working is complete (basic NIC functions may fail until that is complete), then the part which needs to be answered before continuing is the output of “ifconfig” and “route” (mouse copy and paste would be the best way of doing this). However, due to the Intel NIC having questions in your other thread, I don’t want to mix the Intel NIC i2c questions with the network and bonding setup questions. Network setup is actually independent of topics on making the particular NIC i2c function, and bonding is yet another topic once the multi-port NIC is set up as just plain ethernet. If you are satisfied that you have at least one ethernet running, then we can use the “ifconfig” and “route” to get a single camera working over a single gigabit. We can then go forward with whatever questions you might have for bonding a second ethernet.

NOTE: “ifconfig” and “route” will show the actual state of setup. Individual commands, e.g., the “ip link” commands, will be much more difficult to figure out. Operations for bonding can only be debugged once the other steps are working.

Hello,

As I have explained, I have already configured the jetson to work with the camera over a single gigabit. That is why I’ve bought for a PCI, to increase the data transfert.

My first question was about the compatibilties between the jetson TX2 and the intel i350-t4. The driver was already installed, an there is any hardware issues.

Now, I’m asking you tips to set the jetson’s kernel to enable bonding. I have never been handling kernel.
I’ve already gave you all the commands, and my issues ( RTNETLINK answers: Operation not supported).

Thank you,

I should rephrase that as “getting this to work over a single port of the 4-port, then extend to dual ports of the 4-port”. In the case of “operation not permitted”, then this can be due to the driver (needing a new kernel module or feature), the hardware (I doubt the native ethernet can handle bonding, but it might with the right kernel feature…even so, I would be performance on a dedicated Intel NIC will outperform this), or user space software (various network admin tools may be required beyond that for basic networking).

The TX2 should be completely compatible with the i350-t4 if (A) the drivers for it are installed, and (B) any i2c issue is resolved (which @WayneWWW commented on in the duplicate thread, https://devtalk.nvidia.com/default/topic/1073008/jetson-tx2/does-jetson-tx2-support-intel-i350-t4-/). “ifconfig” and “route” output would aid in knowing to what extent this works.

To know what progress is made one first has to set up the individual ports of the 4-port, and attempt to use any single port. This is where the need for the “ifconfig” and “route” commands are needed. The address of a single camera ethernet must be matched to the range of addresses one port handles. Other ports must not overlap (this would be an error or collision). It isn’t possible to work on the second network bonding to the first until the two networks function individually. Attempting to get individual networks running might offer clues to the “operation not permitted”, but we need to know if this is the case for the 4-port Intel NIC, not the integrated NIC.

Hello linuxdev,

Thank you for your answer.
For now, I can’t work on the PCI, but I’ll let you know when I will work on it !