I can’t build kernel successfully when I use these command as follow. I can’t slove it.
Command:
TEGRA_KERNEL_OUT=/home/mysystem/nvidia/nvidia_sdk/image
export LOCALVERSION=-tegra
export CROSS_COMPILE=aarch64-linux-gnu-
mkdir -p $TEGRA_KERNEL_OUT
make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig
make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j1
Error:
/home/mysystem/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P2888/Linux_for_Tegra/sources/kernel/nvidia/drivers/net/ethernet/nvidia/pcie/tegra_vnet.c: In function ‘process_ctrl_msg’:
/home/mysystem/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P2888/Linux_for_Tegra/sources/kernel/nvidia/drivers/net/ethernet/nvidia/pcie/tegra_vnet.c:974:11: error: ‘msg.msg_id’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
else if (msg.msg_id == CTRL_MSG_LINK_DOWN_ACK)
^
cc1: all warnings being treated as errors
/home/mysystem/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P2888/Linux_for_Tegra/sources/kernel/kernel-4.9/scripts/Makefile.build:335: recipe for target 'drivers/net/ethernet/nvidia/pcie/tegra_vnet.o' failed
make[6]: *** [drivers/net/ethernet/nvidia/pcie/tegra_vnet.o] Error 1
/home/mysystem/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P2888/Linux_for_Tegra/sources/kernel/kernel-4.9/scripts/Makefile.build:649: recipe for target 'drivers/net/ethernet/nvidia/pcie' failed
make[5]: *** [drivers/net/ethernet/nvidia/pcie] Error 2
/home/mysystem/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P2888/Linux_for_Tegra/sources/kernel/kernel-4.9/scripts/Makefile.build:649: recipe for target 'drivers/net/ethernet/nvidia' failed
make[4]: *** [drivers/net/ethernet/nvidia] Error 2
/home/mysystem/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P2888/Linux_for_Tegra/sources/kernel/kernel-4.9/scripts/Makefile.build:649: recipe for target 'drivers/net/ethernet' failed
make[3]: *** [drivers/net/ethernet] Error 2
/home/mysystem/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P2888/Linux_for_Tegra/sources/kernel/kernel-4.9/scripts/Makefile.build:649: recipe for target 'drivers/net' failed
make[2]: *** [drivers/net] Error 2
/home/mysystem/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P2888/Linux_for_Tegra/sources/kernel/kernel-4.9/Makefile:1104: recipe for target 'drivers' failed
make[1]: *** [drivers] Error 2
make[1]: Leaving directory '/home/mysystem/nvidia/nvidia_sdk/image'
Makefile:171: recipe for target 'sub-make' failed
make: *** [sub-make] Error 2
Which kernel are you compiling, and what download source? What is your output from “aarch64-linux-gnu-gcc --version”?
kernel is 4.9, and I just use this command to get the kernel:
./source_sync.sh -k tegra-l4t-r32.2.0
After getting kernel, I use last commands to build kernel, but failed.
the aarch64-linux-gnu-gcc version is as follow:
aarch64-linux-gnu-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
I have tried many times, even I clone the kernel source again and again.
Hi,
The issue can be solved by initializing msg as shown below
--- a/kernel/nvidia/drivers/net/ethernet/nvidia/pcie/tegra_vnet.c
+++ b/kernel/nvidia/drivers/net/ethernet/nvidia/pcie/tegra_vnet.c
@@ -964,6 +964,7 @@ static void process_ctrl_msg(struct work_struct *work)
struct ep_ring_buf *ep_mem = &tvnet->ep_mem;
struct ep_own_cnt *ep_cnt = ep_mem->ep_cnt;
struct ctrl_msg msg;
+ memset(&msg, 0, sizeof(msg));
while (tvnet_ivc_rd_available(ep_cnt, host_cnt, EP2H_CTRL)) {
tvnet_read_ctrl_msg(tvnet, &msg);
--- a/kernel/nvidia/drivers/pci/endpoint/functions/pci-epf-tegra-vnet.c
+++ b/kernel/nvidia/drivers/pci/endpoint/functions/pci-epf-tegra-vnet.c
@@ -1004,6 +1004,7 @@ static void process_ctrl_msg(struct work_struct *work)
struct ep_ring_buf *ep_ring_buf = &tvnet->ep_ring_buf;
struct ep_own_cnt *ep_cnt = ep_ring_buf->ep_cnt;
struct ctrl_msg msg;
+ memset(&msg, 0, sizeof(msg));
while (tvnet_ivc_rd_available(ep_cnt, host_cnt, H2EP_CTRL)) {
tvnet_read_ctrl_msg(tvnet, &msg);
There has been some progress in using newer gcc releases. If you run “which aarch64-linux-gnu-gcc”, where is it located?
FYI, this would install the newer version of the cross compiler:
sudo apt-get install gcc-aarch64-linux-gnu
# Then to see version (you may need to specify full path in "export CROSS_COMPILE" if it still sees the older one):
aarch64-linux-gnu-gcc --version
aarch64-linux-gnu-gcc (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) 7.4.0
Using this I don’t run into the issue. I’m thinking that what you are seeing is related to compiler version differences.
Hi,
The issue can be solved by initializing msg as shown below
--- a/kernel/nvidia/drivers/net/ethernet/nvidia/pcie/tegra_vnet.c
+++ b/kernel/nvidia/drivers/net/ethernet/nvidia/pcie/tegra_vnet.c
@@ -964,6 +964,7 @@ static void process_ctrl_msg(struct work_struct *work)
struct ep_ring_buf *ep_mem = &tvnet->ep_mem;
struct ep_own_cnt *ep_cnt = ep_mem->ep_cnt;
struct ctrl_msg msg;
+ memset(&msg, 0, sizeof(msg));
while (tvnet_ivc_rd_available(ep_cnt, host_cnt, EP2H_CTRL)) {
tvnet_read_ctrl_msg(tvnet, &msg);
--- a/kernel/nvidia/drivers/pci/endpoint/functions/pci-epf-tegra-vnet.c
+++ b/kernel/nvidia/drivers/pci/endpoint/functions/pci-epf-tegra-vnet.c
@@ -1004,6 +1004,7 @@ static void process_ctrl_msg(struct work_struct *work)
struct ep_ring_buf *ep_ring_buf = &tvnet->ep_ring_buf;
struct ep_own_cnt *ep_cnt = ep_ring_buf->ep_cnt;
struct ctrl_msg msg;
+ memset(&msg, 0, sizeof(msg));
while (tvnet_ivc_rd_available(ep_cnt, host_cnt, H2EP_CTRL)) {
tvnet_read_ctrl_msg(tvnet, &msg);
I fix this problem by this way.