In the screen grab I chose the COMPLETE set of files. It's huge, but was worth it considering how many attempts it took to finish a clean installation! Doing a complete installation also seems to eliminate some issues I had with the install wanting to sign me up for some sort of web monitoring...



The install hangs towards the end on both Ubuntu 22.04LTS and now 22.10.
I literally had to make 7-8 tries on the first box before I had success. A stock Ubuntu system appears to be missing one or more libs/apps necessary for the install. I thought I had figured out which ones, so when I decided I needed to upgrade the primary disk to something larger for FPGA work I discounted the install issue. But no, it took another 7-8 tries on this new disk. On my first attempt on this new box (to get the required memory, ie. 18GB+) it again hung. I remembered that there is a post install step the installation prompts you to do, specifically "sudo installlibs.sh".
I ran that (grabbed from the 1st box), and my second attempt worked without problem. Apparently there is a chicken & egg issue... I don't know if installlibs.sh has been created by the time the box hangs.
Here is the meat of that script. I would suggest installing them all before the attempt to install Vivado itself.
doUbuntu()
{
### AIE Tools prerequisite libraries
apt-get update | tee -a $logFile
apt-get install -y libc6-dev-i386 net-tools | tee -a $logFile
apt-get install -y graphviz | tee -a $logFile
apt-get install -y make | tee -a $logFile
### Vitis Tools prerequisite libraries
apt-get install -y unzip | tee -a $logFile
apt-get install -y g++ | tee -a $logFile
apt-get install -y libtinfo5 | tee -a $logFile
apt-get install -y xvfb | tee -a $logFile
apt-get install -y git | tee -a $logFile
apt-get install -y libncursesw5 | tee -a $logFile
apt-get install -y libc6-dev-i386 | tee -a $logFile
}
My memory is a bit weak here, I think you unzip that HUGE downloaded file and then:



Here I turned off entries for parts I don't expect to use, you can always add them later.

You have no choice but to check all of these:

Note here that I choose linux friendly locations. We previously created "/usr/local/Xilinx"
and changed ownership to our ID.
Removing the spaces from the shortcut string causes them to end up here:
~/.config/menus/applications-merged/XilinxDesignTools.menu
~/.local/share/desktop-directories/XilinxDesignTools_1671894493844.directory


Click on finish and go for a cup of coffee...
If you managed to complete the install without having run installIibs.sh do it now:

You also have to install the USB Cable driver:
$ cd /usr/local/Xilinx/Vivado/2022.2/data/xicom/cable_drivers/lin64/install_script/install_drivers $ sudo ./install_drivers
============================================================
I didn't get warm fuzzies from the possibility of WebTalk calling home... I *thought* it was off because of the "full installation" I did. Trust but verify, on the Tcl Console do:
config_webtalk -info INFO: [Common 17-1369] WebTalk has been disabled by the current user. INFO: [Common 17-1370] WebTalk has been disabled for the current installation. INFO: [Common 17-1366] This combination of user/install settings means that WebTalk is currently disabled.
I found this useful site while browsing for other stuff.
============================================================
The changes I needed to make to the Xilinx xdma driver for Ubuntu 22:
diff --git a/XDMA/linux-kernel/xdma/cdev_sgdma.c b/XDMA/linux-kernel/xdma/cdev_sgdma.c
index 2b13000..c17145f 100644
--- a/XDMA/linux-kernel/xdma/cdev_sgdma.c
+++ b/XDMA/linux-kernel/xdma/cdev_sgdma.c
@@ -105,7 +105,11 @@ static void async_io_handler(unsigned long cb_hndl, int err)
res = caio->res;
res2 = caio->res2;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)
+ #if 0
caio->iocb->ki_complete(caio->iocb, res, res2);
+ #else
+ caio->iocb->ki_complete(caio->iocb, res);
+ #endif
#else
aio_complete(caio->iocb, res, res2);
#endif
@@ -120,7 +124,11 @@ skip_tran:
skip_dev_lock:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)
+ #if 0
caio->iocb->ki_complete(caio->iocb, numbytes, -EBUSY);
+ #else
+ caio->iocb->ki_complete(caio->iocb, numbytes);
+ #endif
#else
aio_complete(caio->iocb, numbytes, -EBUSY);
#endif
diff --git a/XDMA/linux-kernel/xdma/libxdma.c b/XDMA/linux-kernel/xdma/libxdma.c
index 4342b79..f009207 100644
--- a/XDMA/linux-kernel/xdma/libxdma.c
+++ b/XDMA/linux-kernel/xdma/libxdma.c
@@ -2908,7 +2908,11 @@ static void transfer_destroy(struct xdma_dev *xdev, struct xdma_transfer *xfer)
struct sg_table *sgt = xfer->sgt;
if (sgt->nents) {
+#if 0
pci_unmap_sg(xdev->pdev, sgt->sgl, sgt->nents,
+#else
+ dma_unmap_sg(&xdev->pdev->dev, sgt->sgl, sgt->nents,
+#endif
xfer->dir);
sgt->nents = 0;
}
@@ -3192,7 +3196,11 @@ ssize_t xdma_xfer_aperture(struct xdma_engine *engine, bool write, u64 ep_addr,
}
if (!dma_mapped) {
+#if 0
sgt->nents = pci_map_sg(xdev->pdev, sgt->sgl, sgt->orig_nents,
+#else
+ sgt->nents = dma_map_sg(&xdev->pdev->dev, sgt->sgl, sgt->orig_nents,
+#endif
dir);
if (!sgt->nents) {
pr_info("map sgl failed, sgt 0x%p.\n", sgt);
@@ -3434,7 +3442,11 @@ ssize_t xdma_xfer_aperture(struct xdma_engine *engine, bool write, u64 ep_addr,
unmap_sgl:
if (!dma_mapped && sgt->nents) {
+#if 0
pci_unmap_sg(xdev->pdev, sgt->sgl, sgt->orig_nents, dir);
+#else
+ dma_unmap_sg(&xdev->pdev->dev, sgt->sgl, sgt->orig_nents, dir);
+#endif
sgt->nents = 0;
}
@@ -3504,7 +3516,11 @@ ssize_t xdma_xfer_submit(void *dev_hndl, int channel, bool write, u64 ep_addr,
}
if (!dma_mapped) {
+#if 0
nents = pci_map_sg(xdev->pdev, sg, sgt->orig_nents, dir);
+#else
+ nents = dma_map_sg(&xdev->pdev->dev, sg, sgt->orig_nents, dir);
+#endif
if (!nents) {
pr_info("map sgl failed, sgt 0x%p.\n", sgt);
return -EIO;
@@ -3660,8 +3676,12 @@ ssize_t xdma_xfer_submit(void *dev_hndl, int channel, bool write, u64 ep_addr,
unmap_sgl:
if (!dma_mapped && sgt->nents) {
+#if 0
pci_unmap_sg(xdev->pdev, sgt->sgl, sgt->orig_nents, dir);
- sgt->nents = 0;
+#else
+ dma_unmap_sg(&xdev->pdev->dev, sgt->sgl, sgt->orig_nents, dir);
+#endif
+ sgt->nents = 0;
}
if (req)
@@ -3781,7 +3801,11 @@ ssize_t xdma_xfer_completion(void *cb_hndl, void *dev_hndl, int channel,
unmap_sgl:
if (!dma_mapped && sgt->nents) {
+#if 0
pci_unmap_sg(xdev->pdev, sgt->sgl, sgt->orig_nents, dir);
+#else
+ dma_unmap_sg(&xdev->pdev->dev, sgt->sgl, sgt->orig_nents, dir);
+#endif
sgt->nents = 0;
}
@@ -3855,7 +3879,11 @@ ssize_t xdma_xfer_submit_nowait(void *cb_hndl, void *dev_hndl, int channel,
}
if (!dma_mapped) {
+#if 0
nents = pci_map_sg(xdev->pdev, sg, sgt->orig_nents, dir);
+#else
+ nents = dma_map_sg(&xdev->pdev->dev, sg, sgt->orig_nents, dir);
+#endif
if (!nents) {
pr_info("map sgl failed, sgt 0x%p.\n", sgt);
return -EIO;
@@ -3895,7 +3923,11 @@ ssize_t xdma_xfer_submit_nowait(void *cb_hndl, void *dev_hndl, int channel,
pr_info("transfer_init failed\n");
if (!dma_mapped && sgt->nents) {
+#if 0
pci_unmap_sg(xdev->pdev, sgt->sgl,
+#else
+ dma_unmap_sg(&xdev->pdev->dev, sgt->sgl,
+#endif
sgt->orig_nents, dir);
sgt->nents = 0;
}
@@ -3943,7 +3975,11 @@ ssize_t xdma_xfer_submit_nowait(void *cb_hndl, void *dev_hndl, int channel,
unmap_sgl:
if (!dma_mapped && sgt->nents) {
+#if 0
pci_unmap_sg(xdev->pdev, sgt->sgl, sgt->orig_nents, dir);
+#else
+ dma_unmap_sg(&xdev->pdev->dev, sgt->sgl, sgt->orig_nents, dir);
+#endif
sgt->nents = 0;
}
@@ -4191,16 +4227,32 @@ static int set_dma_mask(struct pci_dev *pdev)
dbg_init("sizeof(dma_addr_t) == %ld\n", sizeof(dma_addr_t));
/* 64-bit addressing capability for XDMA? */
- if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
+#if 0
+ if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
+#else
+ if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
+#endif
/* query for DMA transfer */
/* @see Documentation/DMA-mapping.txt */
dbg_init("pci_set_dma_mask()\n");
/* use 64-bit DMA */
dbg_init("Using a 64-bit DMA mask.\n");
+#if 0
pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
+#else
+ dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
+#endif
+#if 0
} else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
+#else
+ } else if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) {
+#endif
dbg_init("Could not set 64-bit DMA mask.\n");
+#if 0
pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
+#else
+ dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
+#endif
/* use 32-bit DMA */
dbg_init("Using a 32-bit DMA mask.\n");
} else {