[HOWTO] make a xzm module driver for NVIDIA video card
[HOWTO] make a xzm module driver for NVIDIA video card
@Blaze, I have a couple of suggestions to improve your script:
1- create a zip file with your script, blacklist and vdpau.sh (explained in item 4);
2- don't require the blacklist to be located at $PORTDIR, instead expect it to be in the same folder as the script;
3- don't require the driver to be located at /tmp, instead expect it to be in the same folder as the script;
4- create a copy of /etc/profile.d/vdpau.sh and uncomment the line related to Nvidia (i.e. remove # from the beginning of export VDPAU_DRIVER="nvidia") and pack it in the final module. This will allow videos to be hardware decoded, as explained here;
5- you recommend to answer 'no' to the question 'Install NVIDIA's 32-bit compatibility libraries?', but it all depends on what users will do, so if they want to play Windows games via Wine, for example, they will need to answer 'yes'. So my suggestion is to explain a bit better what this options is about;
P.S.: your script link is throwing a 404
1- create a zip file with your script, blacklist and vdpau.sh (explained in item 4);
2- don't require the blacklist to be located at $PORTDIR, instead expect it to be in the same folder as the script;
3- don't require the driver to be located at /tmp, instead expect it to be in the same folder as the script;
4- create a copy of /etc/profile.d/vdpau.sh and uncomment the line related to Nvidia (i.e. remove # from the beginning of export VDPAU_DRIVER="nvidia") and pack it in the final module. This will allow videos to be hardware decoded, as explained here;
5- you recommend to answer 'no' to the question 'Install NVIDIA's 32-bit compatibility libraries?', but it all depends on what users will do, so if they want to play Windows games via Wine, for example, they will need to answer 'yes'. So my suggestion is to explain a bit better what this options is about;
P.S.: your script link is throwing a 404
- Blaze
- DEV Team
- Posts: 3885
- Joined: 28 Dec 2010, 11:31
- Distribution: ⟰ Porteus current ☯ all DEs ☯
- Location: ☭ Russian Federation, Lipetsk region, Dankov
- Contact:
[HOWTO] make a xzm module driver for NVIDIA video card
fulalas, ok, when I will found some free time I try to apply your suggestions.
In this time I am fight with 0050-compat32-multilib-lite-x86_64
BTW, my latest version of my nvidia script is here
Thanks.
In this time I am fight with 0050-compat32-multilib-lite-x86_64
BTW, my latest version of my nvidia script is here
for me all ok. Do you able to open https://cloud.mail.ru ?
Thanks.
Linux 6.6.11-porteus #1 SMP PREEMPT_DYNAMIC Sun Jan 14 12:07:37 MSK 2024 x86_64 Intel(R) Xeon(R) CPU E3-1270 v6 @ 3.80GHz GenuineIntel GNU/Linux
MS-7A12 » [AMD/ATI] Navi 23 [Radeon RX 6600] [1002:73ff] (rev c7) » Vengeance LPX 16GB DDR4 K2 3200MHz C16
MS-7A12 » [AMD/ATI] Navi 23 [Radeon RX 6600] [1002:73ff] (rev c7) » Vengeance LPX 16GB DDR4 K2 3200MHz C16
[HOWTO] make a xzm module driver for NVIDIA video card
Here we go:
Changes:
1- we don't need .run file anymore. I'm getting the driver version from the actual driver file;
2- adding vdpau rule;
3- I'm not removing blacklist.xzm because I don't like the idea of removing a file that the installer doesn't create;
4- minor changes that I can't remember; please check if you approve everything;
EDITED: I finally understood why $MODDIR and $PORTDIR variables can't be found on my machine. It turns out that this won't work if you call a script like this:
I don't know why, but it seems some variables aren't exported if you don't call this before:
EDITED 2: I found a workaround. The script above was updated.
Code: Select all
#!/bin/bash
# Build of Nvidia video driver, cleaning and compressing to xzm module for Porteus
# You can use this script for both architectures i586 or x86_64
# Version 2019-07-18
# Written by Blaze <admin at ublaze.ru>
# Modified by fulalas <your email at zipmail.com.br>
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# Root check
if [ `whoami` != "root" ]; then
echo -e "\e[1m\e[31mOnly root can run this.\e[0m"
exit 1
fi
# Creating installer variable and folder
MODULES_FOLDER=$(readlink -f /mnt/live/porteus/modules)
INSTALL_TEMP_FOLDER=/tmp/nvidia-$$
mkdir $INSTALL_TEMP_FOLDER
# Checking and extracting blacklist.xzm
if [ -f blacklist.xzm ]; then
xzm2dir blacklist.xzm $INSTALL_TEMP_FOLDER &>/dev/null
elif [ -f "$PORTDIR/optional/blacklist.xzm" ]; then
xzm2dir "$PORTDIR/optional/blacklist.xzm" $INSTALL_TEMP_FOLDER &>/dev/null
elif [ -f "$PORTDIR/base/blacklist.xzm" ]; then
xzm2dir "$PORTDIR/base/blacklist.xzm" $INSTALL_TEMP_FOLDER &>/dev/null
else
echo -e "\e[1m\e[31mblacklist.xzm couldn't be found.\e[0m"
rm -rf $INSTALL_TEMP_FOLDER
exit 1
fi
# Selective compression and extraction of memory changes
sync; echo 3 > /proc/sys/vm/drop_caches
echo -e '\n\033[1m\e[32m[*]\e[0m\033[1m Compression of memory changes to /tmp/nvidia.tar.gz...\033[0m'
tar czf /tmp/nvidia.tar.gz --exclude={"*/.*","*/.wh.*",".cache","dev","home","mnt","opt","root","run","tmp","var","etc/bootcmd.cfg","etc/ld.so.cache","etc/fstab","etc/random-seed","etc/cups","etc/udev","etc/profile.d","etc/porteus","etc/X11/xorg.conf.nvidia-xconfig-original","lib/firmware","lib/modules/*porteus/modules.*","usr/man","usr/src","usr/bin/gnome-keyring-daemon","usr/lib/gio","usr/lib/gtk-2.0","usr/lib/gtk-3.0","usr/lib/libXvMCgallium.so.1","usr/lib/libbrscandec2.so.1","usr/lib/libgsm.so.1","usr/lib/libudev.so.1","usr/lib/libunrar.so.5","usr/lib64/gio","usr/lib64/gtk-2.0","usr/lib64/gtk-3.0","usr/lib64/libXvMCgallium.so.1","usr/lib64/libbrscandec2.so.1","usr/lib64/libgsm.so.1","usr/lib64/libudev.so.1","usr/lib64/libunrar.so.5","usr/local","usr/share/glib-2.0","usr/share/mime","usr/share/pixmaps","usr/share/applications/mimeinfo.cache","usr/local/share/applications/mimeinfo.cache","usr/share/doc/NVIDIA_GLX-1.0/html","usr/share/doc/NVIDIA_GLX-1.0/sample","usr/share/doc/NVIDIA_GLX-1.0/LICENSE","usr/share/doc/NVIDIA_GLX-1.0/NVIDIA_Changelog","usr/share/doc/NVIDIA_GLX-1.0/README.txt"} -C /mnt/live/memory changes
echo -e "\n\033[1m\e[32m[*]\e[0m\033[1m Extraction of memory changes from /tmp/nvidia.tar.gz to $INSTALL_TEMP_FOLDER...\033[0m"
tar xf /tmp/nvidia.tar.gz --strip 1 -C $INSTALL_TEMP_FOLDER
# Сleaning driver
echo -e "\n\033[1m\e[32m[*]\e[0m\033[1m Cleaning of driver directory...\033[0m"
rm -rf $INSTALL_TEMP_FOLDER/{.cache,dev,home,mnt,opt,root,run,tmp,var}
find $INSTALL_TEMP_FOLDER -type f -maxdepth 1 -delete
find $INSTALL_TEMP_FOLDER -type l -maxdepth 1 -delete
find $INSTALL_TEMP_FOLDER/etc/ -type f -maxdepth 1 -delete
find $INSTALL_TEMP_FOLDER/etc/ -type d ! -iname 'modprobe.d' ! -iname 'OpenCL' ! -iname 'vulkan' ! -iname 'X11' ! -iname 'etc' -maxdepth 1 -exec rm -rf '{}' '+'
rm -f $INSTALL_TEMP_FOLDER/etc/X11/xorg.conf.nvidia-xconfig-original
rm -rf $INSTALL_TEMP_FOLDER/lib/firmware
rm -f $INSTALL_TEMP_FOLDER/lib/modules/*porteus/modules.*
rm -rf $INSTALL_TEMP_FOLDER/usr/{man,src}
rm -f $INSTALL_TEMP_FOLDER/usr/bin/gnome-keyring-daemon
rm -rf $INSTALL_TEMP_FOLDER/usr/lib/{gio,gtk-2.0,gtk-3.0}
rm -f $INSTALL_TEMP_FOLDER/usr/lib/{libXvMCgallium.so.1,libbrscandec2.so.1,libgsm.so.1,libudev.so.1,libunrar.so.5}
rm -rf $INSTALL_TEMP_FOLDER/usr/lib64/{gio,gtk-2.0,gtk-3.0}
rm -f $INSTALL_TEMP_FOLDER/usr/lib64/{libXvMCgallium.so.1,libbrscandec2.so.1,libgsm.so.1,libudev.so.1,libunrar.so.5}
rm -rf $INSTALL_TEMP_FOLDER/usr/local
rm -rf $INSTALL_TEMP_FOLDER/usr/share/{glib-2.0,mime,pixmaps}
rm -f $INSTALL_TEMP_FOLDER/usr/{,local/}share/applications/mimeinfo.cache
rm -rf $INSTALL_TEMP_FOLDER/usr/share/doc/NVIDIA_GLX-1.0/{html,sample,LICENSE,NVIDIA_Changelog,README.txt}
ls -la
# Adding vdpau hardware video decode rule
if [ -f vdpau.sh ]; then
mkdir -p $INSTALL_TEMP_FOLDER/etc/profile.d
cp vdpau.sh $INSTALL_TEMP_FOLDER/etc/profile.d
else
echo -e "\n\e[1m\e[31mvdpau.sh couldn't be found. Hardware video decode won't work properly.\e[0m"
fi
# Getting driver version
case $(arch) in
i486) LIBDIR="/usr/lib"
;;
x86_64) LIBDIR="/usr/lib64"
;;
*) LIBDIRSUFFIX="/usr/lib"
;;
esac
DRIVER_FILE=$(find $LIBDIR/libEGL_nvidia.so* \! -type l)
DRIVER_VERSION=${DRIVER_FILE: -6}
# Creating final module
MODULE_FILENAME=08-nvidia-$DRIVER_VERSION-k.$(uname -r)-$(cat /etc/porteus-version | cut -d '-' -f2)-$(arch).xzm
dir2xzm $INSTALL_TEMP_FOLDER/ /tmp/$MODULE_FILENAME 2>/dev/null
mv /tmp/$MODULE_FILENAME $MODULES_FOLDER
# Removing temporary files
rm -f /tmp/nvidia.tar.gz
rm -f /tmp/nvidia.xzm
rm -rf $INSTALL_TEMP_FOLDER
# Reboot
echo -e "\n\e[1m\e[32m[DONE]\e[0m \e[1mYou can find your Nvidia driver module in \e[96m$MODULES_FOLDER\e[0m"
echo -e "\e[1m>>> Now you can reboot Porteus via \e[92mreboot\e[0m \e[1mcommand <<<\e[0m\n"
1- we don't need .run file anymore. I'm getting the driver version from the actual driver file;
2- adding vdpau rule;
3- I'm not removing blacklist.xzm because I don't like the idea of removing a file that the installer doesn't create;
4- minor changes that I can't remember; please check if you approve everything;
EDITED: I finally understood why $MODDIR and $PORTDIR variables can't be found on my machine. It turns out that this won't work if you call a script like this:
Code: Select all
sudo ./script.sh
Code: Select all
sudo su
EDITED 2: I found a workaround. The script above was updated.
- Rava
- Contributor
- Posts: 5401
- Joined: 11 Jan 2011, 02:46
- Distribution: XFCE 5.01 x86_64 + 4.0 i586
- Location: Forests of Germany
[HOWTO] make a xzm module driver for NVIDIA video card
I agree. I have my blacklist.xzm renamed as XXXblacklist.xzm and all the other needed modules for Nvidia driver compile named XXX* as well - and put into optional/ - to be able to start this setup via the added kernel cheatcode
Code: Select all
load=XXX
So, I sure not want the nvidia.sh to delete the file.
E.g. could be I only realized something went wrong after restarting the system with the new compiled Nvidia driver, and I have to compile it once again.
Cheers!
Yours Rava
Yours Rava
- Blaze
- DEV Team
- Posts: 3885
- Joined: 28 Dec 2010, 11:31
- Distribution: ⟰ Porteus current ☯ all DEs ☯
- Location: ☭ Russian Federation, Lipetsk region, Dankov
- Contact:
[HOWTO] make a xzm module driver for NVIDIA video card
fulalas, well done
I updated the script header.
If you wish, you can add your email.
BTW, not bad to add name of process ID for
like this
Thanks.
I updated the script header.
If you wish, you can add your email.
BTW, not bad to add name of process ID for
Code: Select all
INSTALL_TEMP_FOLDER=/tmp/nvidia
Code: Select all
INSTALL_TEMP_FOLDER=/tmp/nvidia-$$
Linux 6.6.11-porteus #1 SMP PREEMPT_DYNAMIC Sun Jan 14 12:07:37 MSK 2024 x86_64 Intel(R) Xeon(R) CPU E3-1270 v6 @ 3.80GHz GenuineIntel GNU/Linux
MS-7A12 » [AMD/ATI] Navi 23 [Radeon RX 6600] [1002:73ff] (rev c7) » Vengeance LPX 16GB DDR4 K2 3200MHz C16
MS-7A12 » [AMD/ATI] Navi 23 [Radeon RX 6600] [1002:73ff] (rev c7) » Vengeance LPX 16GB DDR4 K2 3200MHz C16
[HOWTO] make a xzm module driver for NVIDIA video card
@Blaze, what if we update your first post with the new script?
- Blaze
- DEV Team
- Posts: 3885
- Joined: 28 Dec 2010, 11:31
- Distribution: ⟰ Porteus current ☯ all DEs ☯
- Location: ☭ Russian Federation, Lipetsk region, Dankov
- Contact:
[HOWTO] make a xzm module driver for NVIDIA video card
Done.
I don't agree with this, because if you don't placed blacklist.xzm to /porteus/base/ - you are not able to compile Nvidia driver in the Text mode.
Отправлено спустя 7 часов 45 минут 47 секунд:
I updated manual again. Please check it
Linux 6.6.11-porteus #1 SMP PREEMPT_DYNAMIC Sun Jan 14 12:07:37 MSK 2024 x86_64 Intel(R) Xeon(R) CPU E3-1270 v6 @ 3.80GHz GenuineIntel GNU/Linux
MS-7A12 » [AMD/ATI] Navi 23 [Radeon RX 6600] [1002:73ff] (rev c7) » Vengeance LPX 16GB DDR4 K2 3200MHz C16
MS-7A12 » [AMD/ATI] Navi 23 [Radeon RX 6600] [1002:73ff] (rev c7) » Vengeance LPX 16GB DDR4 K2 3200MHz C16
- Rava
- Contributor
- Posts: 5401
- Joined: 11 Jan 2011, 02:46
- Distribution: XFCE 5.01 x86_64 + 4.0 i586
- Location: Forests of Germany
[HOWTO] make a xzm module driver for NVIDIA video card
Blaze is right on that, wherever the blacklist module is located - base or optional - it needs to be activated during the bootup, the compiling will fail if you activate it after you started up the system, at least when you have started X.
Anyhow, was anyone able to compile for neko's kernel 5.1.17 the Nvidia 340.107 or 304.37 x86-64 drivers?
Or for his 5.1.18 kernel? Or for 5.2.2?
And please do tell us if the patches have been necessary for the drivers to work.
If so, please upload these to the net.
Cheers!
Yours Rava
Yours Rava
- Blaze
- DEV Team
- Posts: 3885
- Joined: 28 Dec 2010, 11:31
- Distribution: ⟰ Porteus current ☯ all DEs ☯
- Location: ☭ Russian Federation, Lipetsk region, Dankov
- Contact:
[HOWTO] make a xzm module driver for NVIDIA video card
Today I got notebook with NVIDIA GeForce GT 740M and I builded 08-nvidia-418.74-k.5.2.2-porteus-v5.0-x86_64.xzm (32 bit libs are included too).
I had problems compiling the NVIDIA 418.74 driver on Kernel 5.2.2
but I found this solution https://garajau.com.br/2019/07/compilin ... -kernel-52
I successfully applied two patches https://github.com/kriansa/PKGBUILDs/tr ... nvidia-418
I had problems compiling the NVIDIA 418.74 driver on Kernel 5.2.2
Code: Select all
CC [M] /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm8.o
CC [M] /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm8_tools.o
CC [M] /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm8_global.o
CC [M] /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm8_gpu.o
CC [M] /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm8_gpu_isr.o
CC [M] /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm8_procfs.o
CC [M] /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm8_va_space.o
CC [M] /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm8_va_space_mm.o
/tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm8_tools.c:209:13: error: conflicting types for ‘put_user_pages’
209 | static void put_user_pages(struct page **pages, NvU64 page_count)
| ^~~~~~~~~~~~~~
In file included from /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/common/inc/nv-pgprot.h:17,
from /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/common/inc/nv-linux.h:20,
from /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm_linux.h:41,
from /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm_common.h:48,
from /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm8_tools.c:23:
./include/linux/mm.h:1075:6: note: previous declaration of ‘put_user_pages’ was here
1075 | void put_user_pages(struct page **pages, unsigned long npages);
| ^~~~~~~~~~~~~~
make[2]: *** [scripts/Makefile.build:279: /tmp/selfgz1423/NVIDIA-Linux-x86_64-418.74/kernel/nvidia-uvm/uvm8_tools.o] Error 1
I successfully applied two patches https://github.com/kriansa/PKGBUILDs/tr ... nvidia-418
- fs62142.patch
Code: Select all
diff --git a/kernel/nvidia/nv-dma.c b/kernel/nvidia/nv-dma.c index 73cdeed..e691014 100644 --- a/kernel/nvidia/nv-dma.c +++ b/kernel/nvidia/nv-dma.c @@ -606,7 +606,7 @@ static NvBool nv_dma_is_map_resource_implemented #if defined(NV_DMA_MAP_RESOURCE_PRESENT) const struct dma_map_ops *ops = get_dma_ops(&nvl->dev->dev); - return (ops->map_resource != NULL); + return (ops && ops->map_resource); #else return NV_FALSE; #endif
- kernel-52.patch
Code: Select all
--- a/kernel/nvidia-uvm/uvm8_tools.c +++ b/kernel/nvidia-uvm/uvm8_tools.c @@ -204,12 +204,14 @@ static bool tracker_is_counter(uvm_tools_event_tracker_t *event_tracker) return event_tracker != NULL && !event_tracker->is_queue; } +/* static void put_user_pages(struct page **pages, NvU64 page_count) { NvU64 i; for (i = 0; i < page_count; i++) put_page(pages[i]); } +*/ static void unmap_user_pages(struct page **pages, void *addr, NvU64 size) {
Code: Select all
# Extract only
./NVIDIA-Linux-x86_64-418.74.run --extract-only
cd NVIDIA-Linux-x86_64-418.74
# Fix https://bugs.archlinux.org/task/62142
patch -Np1 -i ../fs62142.patch
# Fix compilation for Kernel 5.2
patch -Np1 -i ../kernel-52.patch
# Install
./nvidia-installer
cd ..
./nvidia.sh
Linux 6.6.11-porteus #1 SMP PREEMPT_DYNAMIC Sun Jan 14 12:07:37 MSK 2024 x86_64 Intel(R) Xeon(R) CPU E3-1270 v6 @ 3.80GHz GenuineIntel GNU/Linux
MS-7A12 » [AMD/ATI] Navi 23 [Radeon RX 6600] [1002:73ff] (rev c7) » Vengeance LPX 16GB DDR4 K2 3200MHz C16
MS-7A12 » [AMD/ATI] Navi 23 [Radeon RX 6600] [1002:73ff] (rev c7) » Vengeance LPX 16GB DDR4 K2 3200MHz C16
- Rava
- Contributor
- Posts: 5401
- Joined: 11 Jan 2011, 02:46
- Distribution: XFCE 5.01 x86_64 + 4.0 i586
- Location: Forests of Germany
[HOWTO] make a xzm module driver for NVIDIA video card
For now I failed in compiling the 340.107 for Kernel 5.1.17.
Without patching I got this error:
And patching itself failed for now.
I wonder, do I need to apply the 4.11, 5.0 and 5.1 or only the 5.1 one when compiling a driver for 5.1.* kernel?
As example, here is the 5.1 patch:https://aur.archlinux.org/cgit/aur.git/ ... idia-340xx
Without patching I got this error:
Code: Select all
ERROR: Unable to build the NVIDIA kernel module.
I wonder, do I need to apply the 4.11, 5.0 and 5.1 or only the 5.1 one when compiling a driver for 5.1.* kernel?
As example, here is the 5.1 patch:https://aur.archlinux.org/cgit/aur.git/ ... idia-340xx
Code: Select all
diff --git kernel/uvm/nvidia_uvm_lite.c kernel/uvm/nvidia_uvm_lite.c
index 65b9a4d..f5ea5d7 100644
--- kernel/uvm/nvidia_uvm_lite.c
+++ kernel/uvm/nvidia_uvm_lite.c
@@ -830,8 +830,10 @@ done:
#if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
-#else
-int _fault(struct vm_fault *vmf)
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0)
+int _fault(struct vm_fault *vmf)
+#else
+vm_fault_t _fault(struct vm_fault *vmf)
#endif
{
#if defined(NV_VM_FAULT_HAS_ADDRESS)
@@ -886,8 +888,10 @@ static struct vm_operations_struct uvmlite_vma_ops =
#if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
int _sigbus_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
-#else
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0)
int _sigbus_fault(struct vm_fault *vmf)
+#else
+vm_fault_t _sigbus_fault(struct vm_fault *vmf)
#endif
{
vmf->page = NULL;
diff --git kernel/nv-drm.c kernel/nv-drm.c
index 122ba7d..1be5733 100644
--- kernel/nv-drm.c
+++ kernel/nv-drm.c
@@ -146,7 +146,7 @@ static const struct file_operations nv_drm_fops = {
};
static struct drm_driver nv_drm_driver = {
-#if defined(DRIVER_LEGACY)
+#if defined(DRIVER_LEGACY) || LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0)
.driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_LEGACY,
#else
.driver_features = DRIVER_GEM | DRIVER_PRIME,
Cheers!
Yours Rava
Yours Rava
- Rava
- Contributor
- Posts: 5401
- Joined: 11 Jan 2011, 02:46
- Distribution: XFCE 5.01 x86_64 + 4.0 i586
- Location: Forests of Germany
[HOWTO] make a xzm module driver for NVIDIA video card
Code: Select all
./NVIDIA-Linux-x86_64-340.107.run --extract-only
Creating directory NVIDIA-Linux-x86_64-340.107
Verifying archive integrity... OK
Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 340.107...
cd NVIDIA-Linux-x86_64-340.107
Applying the 5.1 patch like Blaze applied his patches failes:
Code: Select all
patch -Np1 -i ../nvidia-340xx_kernel-5.1.patch
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git kernel/uvm/nvidia_uvm_lite.c kernel/uvm/nvidia_uvm_lite.c
|index 65b9a4d..f5ea5d7 100644
|--- kernel/uvm/nvidia_uvm_lite.c
|+++ kernel/uvm/nvidia_uvm_lite.c
--------------------------
File to patch: ^C
Code: Select all
ls -o kernel/uvm/nvidia_uvm_lite.c
-rw-r--r-- 1 root 85470 2018-05-25 06:16 kernel/uvm/nvidia_uvm_lite.c
Maybe Blaze' parameters "-Np1" are just not the correct one for this patch?
Cheers!
Yours Rava
Yours Rava
- ncmprhnsbl
- DEV Team
- Posts: 3938
- Joined: 20 Mar 2012, 03:42
- Distribution: v5.0-64bit
- Location: australia
- Contact:
[HOWTO] make a xzm module driver for NVIDIA video card
from: https://aur.archlinux.org/cgit/aur.git/ ... idia-340xx (where these patches originate)
Code: Select all
patch -Np0 < "${srcdir}/kernel-4.11.patch"
patch -Np0 < "${srcdir}/kernel-5.0.patch"
patch -Np0 < "${srcdir}/kernel-5.1.patch"
i would use all three ... because they might be incremental...
Forum Rules : https://forum.porteus.org/viewtopic.php?f=35&t=44
- Rava
- Contributor
- Posts: 5401
- Joined: 11 Jan 2011, 02:46
- Distribution: XFCE 5.01 x86_64 + 4.0 i586
- Location: Forests of Germany
[HOWTO] make a xzm module driver for NVIDIA video card
Since the 4.11 patch failed, I deleted the folder with the extracted source and started once again.ncmprhnsbl wrote: ↑24 Jul 2019, 23:07of course, change ${srcdir} to whatever suits..
i would use all three ... because they might be incremental...
But once again I get the very same error:
Code: Select all
# patch -Np0 < ../nvidia-340xx_kernel-4.11.patch
patching file kernel/uvm/nvidia_uvm_lite.c
patch unexpectedly ends in middle of line
Hunk #3 succeeded at 874 with fuzz 1.
I just realized, I downloaded another smaller version of the 340.107 .run driver thingy, the one that aur.archlinux.org mentions, I just have to look where I have it, with all the different machines I use for going online and tons of USB thrumbdrives.
TerminatorVoice "I will be back."
Cheers!
Yours Rava
Yours Rava
-
- Full of knowledge
- Posts: 2070
- Joined: 17 Jun 2013, 13:17
- Distribution: Porteus 3.2.2 XFCE 32bit
- Location: Germany
[HOWTO] make a xzm module driver for NVIDIA video card
@ Rava
Try this patch -- it's a combination of 3 patches i found at archlinux.
(used with the original NVIDIA-Linux-x86_64-340.107.run file)
Note
you do (normally) not need to extract the *.run file.
Patches can be applied by the run file itself.
./NVIDIA-Linux-x86_64-340.107.run --apply-patch nv.patch
(nv.patch is the name of my patch combination)
The patching works but i do not know if the resulting *custom.run will
successfully build the driver. -- I do not have a compatible g-card to test it.
Good luck
source of patches:
https://aur.archlinux.org/packages/nvidia-340xx/
Try this patch -- it's a combination of 3 patches i found at archlinux.
(used with the original NVIDIA-Linux-x86_64-340.107.run file)
Code: Select all
--- kernel/uvm/nvidia_uvm_lite.c 2017-09-27 13:50:46.334075042 +0200
+++ kernel/uvm/nvidia_uvm_lite.c 2017-09-27 13:56:06.358041280 +0200
@@ -818,7 +818,11 @@
}
#if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+#else
+int _fault(struct vm_fault *vmf)
+#endif
{
#if defined(NV_VM_FAULT_HAS_ADDRESS)
unsigned long vaddr = vmf->address;
@@ -828,7 +832,11 @@
struct page *page = NULL;
int retval;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
retval = _fault_common(vma, vaddr, &page, vmf->flags);
+#else
+ retval = _fault_common(NULL, vaddr, &page, vmf->flags);
+#endif
vmf->page = page;
@@ -866,7 +874,11 @@
// it's dealing with anonymous mapping (see handle_pte_fault).
//
#if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
int _sigbus_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+#else
+int _sigbus_fault(struct vm_fault *vmf)
+#endif
{
vmf->page = NULL;
return VM_FAULT_SIGBUS;
--- kernel/nv-drm.c 2018-05-25 04:16:20.000000000 +0000
+++ kernel/nv-drm.c 2019-03-04 20:57:40.065280734 +0000
@@ -252,7 +252,11 @@
goto done;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0)
drm_gem_object_unreference_unlocked(&nv_obj->base);
+#else
+ drm_gem_object_put_unlocked(&nv_obj->base);
+#endif
status = RM_OK;
--- kernel/os-interface.c 2018-05-25 04:16:20.000000000 +0000
+++ kernel/os-interface.c 2019-03-04 21:03:03.815854982 +0000
@@ -14,6 +14,16 @@
#include "os-interface.h"
#include "nv-linux.h"
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
+static inline void do_gettimeofday(struct timeval *tv)
+{
+ struct timespec64 now;
+ ktime_get_real_ts64(&now);
+ tv->tv_sec = now.tv_sec;
+ tv->tv_usec = now.tv_nsec/1000;
+}
+#endif
+
RM_STATUS NV_API_CALL os_disable_console_access(void)
{
NV_ACQUIRE_CONSOLE_SEM();
--- kernel/uvm/nvidia_uvm_lite.c 2019-03-04 20:57:25.815255511 +0000
+++ kernel/uvm/nvidia_uvm_lite.c 2019-03-04 21:04:25.239333050 +0000
@@ -30,6 +30,16 @@
#include "nvidia_uvm_lite_counters.h"
#include "ctrl2080mc.h"
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
+static inline void do_gettimeofday(struct timeval *tv)
+{
+ struct timespec64 now;
+ ktime_get_real_ts64(&now);
+ tv->tv_sec = now.tv_sec;
+ tv->tv_usec = now.tv_nsec/1000;
+}
+#endif
+
//
// nvidia_uvm_lite.c
// This file contains code that is specific to the UVM-Lite mode of operation.
--- kernel/uvm/nvidia_uvm_lite.c
+++ kernel/uvm/nvidia_uvm_lite.c
@@ -830,8 +830,10 @@ done:
#if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
-#else
-int _fault(struct vm_fault *vmf)
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0)
+int _fault(struct vm_fault *vmf)
+#else
+vm_fault_t _fault(struct vm_fault *vmf)
#endif
{
#if defined(NV_VM_FAULT_HAS_ADDRESS)
@@ -886,8 +888,10 @@ static struct vm_operations_struct uvmlite_vma_ops =
#if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
int _sigbus_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
-#else
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0)
int _sigbus_fault(struct vm_fault *vmf)
+#else
+vm_fault_t _sigbus_fault(struct vm_fault *vmf)
#endif
{
vmf->page = NULL;
--- kernel/nv-drm.c
+++ kernel/nv-drm.c
@@ -146,7 +146,7 @@ static const struct file_operations nv_drm_fops = {
};
static struct drm_driver nv_drm_driver = {
-#if defined(DRIVER_LEGACY)
+#if defined(DRIVER_LEGACY) || LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0)
.driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_LEGACY,
#else
.driver_features = DRIVER_GEM | DRIVER_PRIME,
you do (normally) not need to extract the *.run file.
Patches can be applied by the run file itself.
./NVIDIA-Linux-x86_64-340.107.run --apply-patch nv.patch
(nv.patch is the name of my patch combination)
The patching works but i do not know if the resulting *custom.run will
successfully build the driver. -- I do not have a compatible g-card to test it.
Good luck
source of patches:
https://aur.archlinux.org/packages/nvidia-340xx/