Pular para o conteúdo principal

Como compilar o módulo de driver para o BSP Jetson da Seeed

Quando o módulo de driver .ko necessário não está disponível no reComputer/reServer, você pode compilar o módulo de driver no Jetson e carregá‑lo. Este wiki demonstra as etapas específicas e observações importantes, usando o JetPack 6.2 como exemplo.

1. Preparar o ambiente de trabalho

Este artigo usa L4T 36.4.3, que corresponde ao BSP JetPack 6.2, como exemplo para mostrar como compilar o módulo de driver .ko para pl2303 (um driver relacionado a USB‑para‑serial) em reComputer/reServer.

dica

Este tutorial faz o download do código‑fonte no Jetson e compila os módulos de kernel .ko.

Primeiro, faça o download do código‑fonte do BSP a partir do site oficial da NVIDIA de acordo com a sua versão do L4T.

Se você não tem certeza sobre a relação entre as versões do L4T e as versões do JetPack, pode consultar este link: https://developer.nvidia.com/embedded/jetpack-archive.

Procure o lançamento específico do L4T (Linux for Tegra) que você deseja compilar, por exemplo:

Baixe o código‑fonte do BSP correspondente no site da NVIDIA:

Coloque o arquivo compactado do código‑fonte do BSP baixado no seu diretório de trabalho e, em seguida, execute os seguintes comandos no terminal para extraí‑lo 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
' _ {} \;

Depois de extrair todos os arquivos compactados, navegue até Linux_for_Tegra/source e localize o caminho do código‑fonte do driver com base em palavras‑chave:

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

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

Crie um novo ambiente de trabalho para compilação. De acordo com o caminho do código‑fonte impresso no terminal, copie o código‑fonte do driver para esse ambiente de trabalho.

Em seguida, dentro do ambiente de trabalho, crie um Makefile para compilação com o seguinte conteúdo:

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

Aqui, pl2303.o deve ser substituído pelo nome correspondente do driver que você deseja compilar.

O ambiente de trabalho será semelhante ao da figura abaixo, contendo tanto o arquivo‑fonte quanto o Makefile:

Antes de compilar, você precisa criar um link 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

Após criar o link simbólico, execute o seguinte comando no seu ambiente de trabalho para compilar e obter o módulo de driver .ko :

make

Após a compilação, o arquivo .ko será gerado no diretório atual:

Em seguida, copie o arquivo .ko para o caminho de destino correto:

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

Para módulos de driver .ko compilados, o prefixo do caminho de destino é sempre /lib/modules/$(uname - r)/kernel/. O sufixo depende do tipo de módulo de driver e pode ser deduzido a partir do caminho relativo do código‑fonte, o que fornece o caminho completo de destino:

Depois de copiar para o caminho de destino, carregue o módulo de driver .ko:

sudo depmod -a
sudo modprobe pl2303

Quando o carregamento for bem‑sucedido, você pode executar modinfo <driver_name> para verificar:

Recursos

Suporte Técnico & Discussão de Produtos

Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja o mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...