Сборка ядра Linux на целевой платформе ARM

Ядро Linux — ядро операционной системы, соответствующее стандартам POSIX, составляющее основу операционных систем семейства Linux. Разработка кода ядра была начата финским студентом Линусом Торвальдсом в 1991 году, на его имя зарегистрирована Торговая марка «Linux».
7 января 2019: первый релиз-кандидат Linux 5.0 (Более 26 млн строк кода).

Для примера соберём ядро с поддержкой Cedrus на целевой платформе.
Sunxi-Cedrus.

Покажу, как собрать на базе ядра (4.19.20-sunxi) от armbian.

uname -a


root@orangepipc:~# uname -a
Linux orangepipc 4.19.20-sunxi #5.75 SMP Sat Feb 9 19:02:47 CET 2019 armv7l armv7l armv7l GNU/Linux

Ставим инструментарий:

apt-get install kernel-package libncurses5-dev fakeroot quilt

Получение исходного кода ядра

cd /usr/src
wget https://github.com/bootlin/linux-cedrus/archive/release-2019.03.tar.gz
tar -xvzf release-2019.03.tar.gz
cd linux-cedrus-release-2019.03
make -j4 sunxi_defconfig
make -j4 menuconfig

Необходимо выбрать следующие параметры конфигурации ядра:
CONFIG_MEDIA_SUPPORT
CONFIG_MEDIA_CONTROLLER
CONFIG_V4L_MEM2MEM_DRIVERS
CONFIG_VIDEO_SUNXI_CEDRUS

Device Drivers  ---> Generic Driver Options  ---> 
        (256) Size in Mega Bytes 
Device Drivers  ---> Multimedia support 
        [*]   Cameras/video grabbers support 
        [*]   Media Controller API
        [*]     Enable Media controller Request API (EXPERIMENTAL)
        [*]   V4L2 sub-device userspace API
        [*]   Enable advanced debug functionality on V4L2 drivers
        [*]   V4L platform devices  --->
                <M>   Allwinner V3s Camera Sensor Interface driver  
        [*]   Memory-to-memory multimedia devices  ---> 
                <M>   Deinterlace support 
                <M>   SuperH VEU mem2mem video processing driver 
         [*]   Media test drivers  --->  
                <M>   Virtual Media Controller Driver (VIMC) 
                <M>   Virtual Video Test Driver    
                 [ ]     Enable CEC emulation support (NEW)    
                (64)    Maximum number of devices (NEW)  
                <M>   Virtual Memory-to-Memory Driver    
                <M>   Virtual Codec Driver
Device Drivers  ---> Staging drivers   ---> Media staging drivers  --->   
        [*]   Allwinner sunXi family Video Devices
        <M>     Allwinner Cedrus VPU driver

Есть у bootlin косяк в конфигурировании, для включения нужных опций, дважды заходим в  Device Drivers -> Multimedia support и Device Drivers -> Staging drivers -> Media staging drivers чтобы включить всё нужные модули ядра.
В дальнейшем мелкие косяки будут и при  сборке libva-v4l2-request и kernel_headers окажется не совсем подходит, собираю вопросы про дальнейшее использование ядра от bootlin
пишите на форум этого сайта .
движок этого сайта по этическим соображениям ломать и встраивать капчи по защите от спама не стал,
проще оказалось развернуть отдельный форум.
пакеты headers и image(ядро) собираю так:

fakeroot make-kpkg -j 4 --initrd --append-to-version=-bootlin kernel_image kernel_headers

На плате Orangepi-PC пакеты собираются примерно за час.
в папке /usr/src найдём два пакета linux-headers-5.0.0-bootlin_5.0.0-bootlin-10.00.Custom_armhf.deb и linux-image-5.0.0-bootlin_5.0.0-bootlin-10.00.Custom_armhf.deb
установим эти пакеты:

cd /usr/src
dpkg -i *.deb

в папке /usr/src/linux-cedrus-release-2019.03/arch/arm/boot/dts найдём файл дерева устройств, в моём случае это файл sun8i-h3-orangepi-pc.dtb (для своей платы ищите соответствующий вашей плате .dtb)
копируем его в нашу систему:

cp -rp /usr/src/linux-cedrus-release-2019.03/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb  /boot/dtb

и делаем новую символьную ссылку на новое ядро:

rm /boot/zImage
ln -s /boot/vmlinuz-5.0.0-bootlin  /boot/zImage 
reboot

проверим:

uname -a


root@orangepipc:~# uname -a
Linux orangepipc 5.0.0-bootlin #1 SMP Sun Mar 17 07:44:45 UTC 2019 armv7l armv7l armv7l GNU/Linux

lsmod


sunxi_cedrus 32768 0
v4l2_mem2mem 20480 1 sunxi_cedrus
videobuf2_dma_contig 20480 1 sunxi_cedrus
videobuf2_memops 16384 1 videobuf2_dma_contig
videobuf2_v4l2 20480 2 sunxi_cedrus,v4l2_mem2mem
videobuf2_common 45056 3 sunxi_cedrus,v4l2_mem2mem,videobuf2_v4l2

root@orangepipc:~# dmesg | grep cedrus
[    4.209507] sunxi_cedrus: module is from the staging directory, the quality is unknown, you have been warned.
[    4.216242] cedrus 1c0e000.video-codec: Device registered as /dev/video0
root@orangepipc:~# ls -l  /dev/video0
crw-rw---- 1 root video 81, 0 Mar 18 15:22 /dev/video0
root@orangepipc:~# ls -l  /dev/media0
crw-rw---- 1 root video 252, 0 Mar 18 15:22 /dev/media0

Если есть вопросы, отвечу на форуме этого сайта .

Поделиться
Отправить
Запинить
17 марта   armbian   Linux
Популярное