Skip to main content

Cómo Construir el Módulo de Controlador para el BSP Jetson de Seeed

Cuando el módulo de controlador .ko requerido no está disponible en reComputer/reServer, puedes compilar el módulo de controlador en Jetson y cargarlo. Este wiki demuestra los pasos específicos y notas importantes, usando JetPack 6.2 como ejemplo.

1. Preparar espacio de trabajo

Este artículo usa L4T 36.4.3, que corresponde al BSP JetPack 6.2, como ejemplo para mostrar cómo compilar el módulo de controlador .ko para pl2303 (un controlador relacionado con USB-a-serie) en reComputer/reServer.

Primero, descarga el código fuente del BSP desde el sitio web oficial de NVIDIA según tu versión de L4T.

Si no estás seguro sobre la relación entre las versiones de L4T y las versiones de JetPack, puedes consultar este enlace: https://developer.nvidia.com/embedded/jetpack-archive.

Busca la versión específica de L4T (Linux for Tegra) que quieres compilar, por ejemplo:

Descarga el código fuente del BSP correspondiente desde el sitio web de NVIDIA:

Coloca el archivo del código fuente del BSP descargado en tu directorio de trabajo, luego ejecuta los siguientes comandos en la terminal para extraerlo completamente:

# First extract the main file
tar -xjf public_sources.tbz2

# Enter the extracted directory
cd Linux_for_Tegra/source

# Recursively extract all .tbz2, .tar.bz2, .tar.gz, .tgz, .tar.xz files
find . -type f \( -name "*.tbz2" -o -name "*.tar.bz2" -o -name "*.tar.gz" -o -name "*.tgz" -o -name "*.tar.xz" \) -exec bash -c '
dir=$(dirname "$1")
filename=$(basename "$1")
cd "$dir"
if [[ "$filename" == *.tbz2 || "$filename" == *.tar.bz2 ]]; then
tar -xjf "$filename"
elif [[ "$filename" == *.tar.gz || "$filename" == *.tgz ]]; then
tar -xzf "$filename"
elif [[ "$filename" == *.tar.xz ]]; then
tar -xJf "$filename"
fi
cd - > /dev/null
' _ {} \;

Después de extraer todos los archivos, navega a Linux_for_Tegra/source y localiza la ruta del código fuente del controlador basándote en palabras clave:

sudo find . -type f -name "*<keyword>*"

# For exmaple:
sudo find . -type f -name "*pl2303*"

Crea un nuevo espacio de trabajo para la compilación. Según la ruta del código fuente impresa en la terminal, copia el código fuente del controlador en este espacio de trabajo.

Luego, dentro del espacio de trabajo, crea un Makefile para la compilación con el siguiente contenido:

obj-m   += pl2303.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Aquí, pl2303.o debe ser reemplazado con el nombre correspondiente del controlador que quieres compilar.

El espacio de trabajo se verá similar a la figura de abajo, conteniendo tanto el archivo fuente como el Makefile:

Antes de compilar, necesitas establecer un enlace simbólico:

# Remove existing redundant directory if it exists
sudo rm -r /lib/modules/$(uname -r)/build

# Create symbolic link
sudo ln -s /usr/src/linux-headers-$(uname -r)-ubuntu22.04_aarch64/3rdparty/canonical/linux-jammy/kernel-source /lib/modules/$(uname -r)/build

Después de crear el enlace simbólico, ejecuta el siguiente comando en tu espacio de trabajo para compilar y obtener el módulo de controlador .ko:

make

Después de la compilación, el archivo .ko se generará en el directorio actual:

A continuación, copia el archivo .ko a la ruta de destino correcta:

sudo cp pl2303.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial/

Para los módulos de controlador .ko compilados, el prefijo de la ruta de destino es siempre /lib/modules/$(uname -r)/kernel/. El sufijo depende del tipo de módulo de controlador y puede inferirse de la ruta relativa del código fuente, lo que da la ruta de destino completa:

Después de copiar a la ruta de destino, carga el módulo de controlador .ko:

sudo depmod -a
sudo modprobe pl2303

Una vez cargado exitosamente, puedes ejecutar modinfo <driver_name> para verificar:

Recursos

Soporte Técnico y Discusión de Productos

¡Gracias por elegir nuestros productos! Estamos aquí para brindarle diferentes tipos de soporte para asegurar que su experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades.

Loading Comments...