You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In visual studio code, in my java project repository, I created a Dockerfile with the following content:
`
FROM rocky-9-wsl2kernel-ni:latest
RUN dnf install -y rpm-build gcc make vim git wget
openssh-server bc flex bison openssl-devel elfutils-libelf-devel
rsync kmod ncurses-devel pkg-config chkconfig dwarves java-17-openjdk-devel
EXPOSE 5025
`
In the vscode command palette, I ran a command that auto created a .devcontainer/devcontainer.json file. I added code to it. The following is the content of my .devcontainer/devcontainer.json file:
{ "name": "Existing Dockerfile", "build": { // Sets the run context to one level up instead of the .devcontainer folder. "context": "..", // Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename. "dockerfile": "../Dockerfile" }, "runArgs": [ "--net", "host", "--env", "DISPLAY=host.docker.internal:0", "--privileged", "--cap-add=ALL" ], "customizations": { "vscode": { "extensions": [ "vscjava.vscode-java-pack", "ms-azuretools.vscode-docker" ] } } }
In the vscode command palette, I ran the command Dev Containers: Rebuild Without Cache and Reopen in Container. Inside the container built from .devcontainer/devcontainer.json, I ran the following commands sequentially which I got from the guide https://learn.microsoft.com/en-us/community/content/wsl-user-msft-kernel-v6: cd /usr/src/kernels, git clone https://github.com/microsoft/WSL2-Linux-Kernel.git --depth=1 -b linux-msft-wsl-6.1.y, cd WSL2-Linux-Kernel, make -j$(nproc) KCONFIG_CONFIG=Microsoft/config-wsl, make modules_install headers_install, make defconfig. I then pulled up a windows powershell and ran the command docker cp 90a6f4002eee8c8c2733d70cb997a0817f88471291afa35b3fa05ce6a5ca4277:/usr/src/kernels/WSL2-Linux-Kernel/arch/x86/boot/bzImage /Users/eliam.calvo. In that same windows powershell I ran the command docker commit 90a6f4002eee8c8c2733d70cb997a0817f88471291afa35b3fa05ce6a5ca4277 rocky-9-wsl2kernel:latest next. On my windows machine, I then went to C:\Users\eliam.calvo and created the file .wslconfig with the following content:
[wsl2] kernel=C:\\Users\\eliam.calvo\\bzImage
I then closed the connection to the dev container and then pulled up a windows powershell as administrator and ran the command wsl --shutdown. I then changed my Dockerfile to the following:
`FROM rocky-9-wsl2kernel:latest
EXPOSE 5025`
I then ran the command Dev Containers: Reopen in Container in the vscode command palette. I then ran the command docker cp /Users/eliam.calvo/Desktop/NILinux2024Q1DeviceDrivers/NILinux2024Q1DeviceDrivers/ni-rhel9-drivers-2024Q1.rpm e156acaa0815b2df90aa79a467f2df26775f19d7db67ec50f30f73df54ba86e7:/home in a windows powershell which I got the rpm from https://www.ni.com/en/support/downloads/drivers/download.ni-linux-device-drivers.html#521765. Then, inside the dev container terminal, I ran the following command sequentially which I basically followed from https://www.ni.com/docs/en-US/bundle/ni-platform-on-linux-desktop/page/installing-ni-products-red-hat-enterprise-linux.html: dnf install -y /home/ni-rhel9-drivers-2024Q1.rpm, dnf install -y ni-visa, rm -rf /usr/src/kernels/5.14.0-362.18.1.el9_3.x86_64, dnf install -y ni-hwcfg-utility, and dkms autoinstall. Then, in a windows powershell, I ran the command docker commit e156acaa0815b2df90aa79a467f2df26775f19d7db67ec50f30f73df54ba86e7 rocky-9-wsl2kernel-ni:latest. I then closed the remote connection. I then changed my Dockerfile to the following:
`FROM rocky-9-wsl2kernel-ni:latest
EXPOSE 5025`
I then opened a dev container in vscode by running the command Dev Containers: Reopen in Container in the vscode command palette. By the way, the .devcontainer/devcontainer.json has remained the same this whole time. Then, in the terminal inside my dev container, I run the command modprobe -v nipalk and insmod /usr/lib/modules/6.1.21.2-microsoft-standard-WSL2+/extra/NiViPciK.ko to insert the required kernel modules in. Inside my Java repository inside the dev container, I run my Java application. When the Java application executes the line JVisaLibrary.viOpenDefaultRM(NativeLongByReference arg0), my application closes abruptly. This is what the terminal inside that docker container looks like:
[root@docker-desktop msda-test]# lsmod Module Size Used by NiViPciK 77824 0 nipalk 897024 1 NiViPciK nikal 102400 1 nipalk [root@docker-desktop msda-test]# cd /workspaces/msda-test ; /usr/bin/env /usr/lib/jvm/java-17-openjdk-17.0.10.0.7-2.el9.x86_64/bin/java -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:34353 @/tmp/cp_aevhl9otyttw9qr0cmd0fl9ar.argfile com.bluehalo.msda.cca.tester.Tester libnipalu.so failed to initialize Verify that nipalk.ko is built and loaded. Aborted [root@docker-desktop msda-test]#
As you can see, I check to see if the modules are loaded in yet before running my java application. Then after the application is ran, i get the error from the terminal output above. I’m not sure what else to try.
Turns out that the device node /dev/nipalk wasn't created automatically. A work around that I did was first do a grep nikal /proc/devices to find the major device number assigned to the nikal module. Then I did a mknod /dev/nipalk c major_number minor_number. Replace major_number with the number you got from the output of grep nikal /proc/devices and minor_number with 0, assuming that is the first created device for nikal that the nikal driver manages. The following is my terminal output as an example.
[root@docker-desktop msda-test]# grep nikal /proc/devices 241 nikal [root@docker-desktop msda-test]# mknod /dev/nipalk c 241 0 [root@docker-desktop msda-test]# ls -l /dev/nipalk crw-r--r-- 1 root root 241, 0 Feb 20 22:44 /dev/nipalk [root@docker-desktop msda-test]#
I don't know why the device wasn't created automatically though whenever I loaded the module into the kernel. Also, I don't know why I have to load in the modules manually either. In a normal installation, all I have to do is follow the steps from https://www.ni.com/docs/en-US/bundle/ni-platform-on-linux-desktop/page/installing-ni-products-red-hat-enterprise-linux.html .
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
In visual studio code, in my java project repository, I created a
Dockerfile
with the following content:`
FROM rocky-9-wsl2kernel-ni:latest
RUN dnf install -y rpm-build gcc make vim git wget
openssh-server bc flex bison openssl-devel elfutils-libelf-devel
rsync kmod ncurses-devel pkg-config chkconfig dwarves java-17-openjdk-devel
EXPOSE 5025
`
In the vscode command palette, I ran a command that auto created a
.devcontainer/devcontainer.json
file. I added code to it. The following is the content of my.devcontainer/devcontainer.json
file:{ "name": "Existing Dockerfile", "build": { // Sets the run context to one level up instead of the .devcontainer folder. "context": "..", // Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename. "dockerfile": "../Dockerfile" }, "runArgs": [ "--net", "host", "--env", "DISPLAY=host.docker.internal:0", "--privileged", "--cap-add=ALL" ], "customizations": { "vscode": { "extensions": [ "vscjava.vscode-java-pack", "ms-azuretools.vscode-docker" ] } } }
In the vscode command palette, I ran the command
Dev Containers: Rebuild Without Cache and Reopen in Container
. Inside the container built from.devcontainer/devcontainer.json
, I ran the following commands sequentially which I got from the guide https://learn.microsoft.com/en-us/community/content/wsl-user-msft-kernel-v6:cd /usr/src/kernels
,git clone https://github.com/microsoft/WSL2-Linux-Kernel.git --depth=1 -b linux-msft-wsl-6.1.y
,cd WSL2-Linux-Kernel
,make -j$(nproc) KCONFIG_CONFIG=Microsoft/config-wsl
,make modules_install headers_install
,make defconfig
. I then pulled up a windows powershell and ran the commanddocker cp 90a6f4002eee8c8c2733d70cb997a0817f88471291afa35b3fa05ce6a5ca4277:/usr/src/kernels/WSL2-Linux-Kernel/arch/x86/boot/bzImage /Users/eliam.calvo
. In that same windows powershell I ran the commanddocker commit 90a6f4002eee8c8c2733d70cb997a0817f88471291afa35b3fa05ce6a5ca4277 rocky-9-wsl2kernel:latest
next. On my windows machine, I then went to C:\Users\eliam.calvo and created the file.wslconfig
with the following content:[wsl2] kernel=C:\\Users\\eliam.calvo\\bzImage
I then closed the connection to the dev container and then pulled up a windows powershell as administrator and ran the command
wsl --shutdown
. I then changed my Dockerfile to the following:`FROM rocky-9-wsl2kernel:latest
EXPOSE 5025`
I then ran the command
Dev Containers: Reopen in Container
in the vscode command palette. I then ran the commanddocker cp /Users/eliam.calvo/Desktop/NILinux2024Q1DeviceDrivers/NILinux2024Q1DeviceDrivers/ni-rhel9-drivers-2024Q1.rpm e156acaa0815b2df90aa79a467f2df26775f19d7db67ec50f30f73df54ba86e7:/home
in a windows powershell which I got the rpm from https://www.ni.com/en/support/downloads/drivers/download.ni-linux-device-drivers.html#521765. Then, inside the dev container terminal, I ran the following command sequentially which I basically followed from https://www.ni.com/docs/en-US/bundle/ni-platform-on-linux-desktop/page/installing-ni-products-red-hat-enterprise-linux.html:dnf install -y /home/ni-rhel9-drivers-2024Q1.rpm
,dnf install -y ni-visa
,rm -rf /usr/src/kernels/5.14.0-362.18.1.el9_3.x86_64
,dnf install -y ni-hwcfg-utility
, anddkms autoinstall
. Then, in a windows powershell, I ran the commanddocker commit e156acaa0815b2df90aa79a467f2df26775f19d7db67ec50f30f73df54ba86e7 rocky-9-wsl2kernel-ni:latest
. I then closed the remote connection. I then changed myDockerfile
to the following:`FROM rocky-9-wsl2kernel-ni:latest
EXPOSE 5025`
I then opened a dev container in vscode by running the command
Dev Containers: Reopen in Container
in the vscode command palette. By the way, the.devcontainer/devcontainer.json
has remained the same this whole time. Then, in the terminal inside my dev container, I run the commandmodprobe -v nipalk
andinsmod /usr/lib/modules/6.1.21.2-microsoft-standard-WSL2+/extra/NiViPciK.ko
to insert the required kernel modules in. Inside my Java repository inside the dev container, I run my Java application. When the Java application executes the lineJVisaLibrary.viOpenDefaultRM(NativeLongByReference arg0)
, my application closes abruptly. This is what the terminal inside that docker container looks like:[root@docker-desktop msda-test]# lsmod Module Size Used by NiViPciK 77824 0 nipalk 897024 1 NiViPciK nikal 102400 1 nipalk [root@docker-desktop msda-test]# cd /workspaces/msda-test ; /usr/bin/env /usr/lib/jvm/java-17-openjdk-17.0.10.0.7-2.el9.x86_64/bin/java -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:34353 @/tmp/cp_aevhl9otyttw9qr0cmd0fl9ar.argfile com.bluehalo.msda.cca.tester.Tester libnipalu.so failed to initialize Verify that nipalk.ko is built and loaded. Aborted [root@docker-desktop msda-test]#
As you can see, I check to see if the modules are loaded in yet before running my java application. Then after the application is ran, i get the error from the terminal output above. I’m not sure what else to try.
Beta Was this translation helpful? Give feedback.
All reactions