Перейти к основному содержимому

4 записи с тегом "kernel"

Посмотреть все теги

Получение текущего DTS из загруженной системы

· 1 мин. чтения
dmn
maintainer

Получить текущий dts из dtb, с которой загрузилась система:

dtc -I fs -O dts /sys/firmware/devicetree/base > /tmp/running.dts

Это ключевой файл, отображающий как система "понимает" всю перефирию и интерфейсы.

Внимательно изучайте файл running.dts через текстовый редактор - он ключ к пониманию как система интерпретирует интерфейсы.

И, кстати, этот dts можно "скормить" в ChatGPT и задавать вопросы или сформировать просьбу сделать overlay.

#kernel #dts

Компиляция ядра NapiLinux - быстрый метод

· 2 мин. чтения
dmn
maintainer

Как скомпилировать только ядро NapiLinux

Это "грязный" быстрый метод, который позволяет не компилировать всю систему, а быстро включить какие-то опции ядра и проверить новое ядро в системе.

Правильный способ компиляции NapiLinux — через пакет Yocto.

1. Сделать клон ядра с нужной ветки (branch)

Бранч — это версия репозитория ядра. Для разных платформ она разная, и нужно выбрать ту, которая вас интересует:

  • rk-6.1
  • orange-pi-6.6
  • rk35xx

и т. п. (выбирайте на сайте GitLab)

git clone https://gitlab.nnz-ipc.net/pub/napilinux/kernel.git --branch=rk-6.1 --depth=1
cd kernel/

2. Настроить переменные для архитектуры (ARM64)

export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-

3. Подготовить конфиг

  • Конфиги лежат в папке /arch/arm64/configs
  • В каждой ветке нужно выбрать свой конфиг:

Для Napi:

make napi_defconfig

Для CM4:

make opi_cm4_defconfig

4. Настройка конфигурации

После этого появится файл .config, в котором вы можете изменить опции ядра под себя.

5. Запускаем компиляцию ядра

make -j10

6. Результаты сборки

  • Имидж ядраarch/arm64/boot/Image
  • Главная DTB (дерево устройств) — arch/arm64/boot/<файл>.dtb
  • Оверлеиarch/arm64/boot/dts/rockchip/

7. Замена ядра в системе

Теперь можно заменить файлы Image и .dtb в /boot, затем перезагрузить систему.

8. Важно про overlay root!

NapiLinux использует root (/) как виртуальную партицию overlay, поэтому просто переписать ядро и другие файлы из системы не получится (на деле вы запишете их в overlay, и u-boot их не увидит).

Что делать?

  • Если работаете на SD-карте — выньте SD, примонтируйте обе физические партиции и запишите новые файлы в их /boot

  • Если работаете с NAND/eMMC — загрузитесь с SD, примонтируйте обе партиции и запишите туда файлы вручную

Просмотр структуры партиций

Посмотреть структуру партиций можно командами:

lsblk
lsblk -f

#napilinux #napikernel

Просмотр опций компиляции ядра Linux

· 1 мин. чтения
dmn
maintainer

Как посмотреть с какими опциями скомпилировано ядро Linux ?

zcat /proc/config.gz

Так же можно поставить фильтр - например, посмотрим все что касается последовательных портов

zcat /proc/config.gz | grep -E 'CONFIG_SERIAL_8250_NR_UARTS|CONFIG_SERIAL_8250|CONFIG_SERIAL_'

#linuxkernel #kernel #napikernel #uart

Диагностика SD-NAND карт в Linux - получение регистров

· 2 мин. чтения
dmn
maintainer

Пришлось глубоко копнуть в часть SD-NAND, так как некоторые карты Zetta не инициализировались в ядрах 6.х Linux.

Полезные факты и приемы

Получаем данные регистров SD (SD-NAND) карт

Карта 1.

root@napi-rk3308b-s:~# cat /sys/bus/mmc/devices/mmc0\:1388/cid
ba2345534134474206071c06fe016945
root@napi-rk3308b-s:~# cat /sys/bus/mmc/devices/mmc0\:1388/csd
400e00325b5900001cdf7f800a4000d7
root@napi-rk3308b-s:~# cat /sys/bus/mmc/devices/mmc0\:1388/ocr
0x00300000
root@napi-rk3308b-s:~# cat /sys/bus/mmc/devices/mmc0\:1388/rca
0x1388
root@napi-rk3308b-s:~# cat /sys/bus/mmc/devices/mmc0\:1388/scr
0235000e00000000
root@napi-rk3308b-s:~#

Карта 2

root@napi-nightstarfish:~# cat /sys/bus/mmc/devices/mmc0\:1388/cid
e700115a6574746101b135ee4a719523
root@napi-nightstarfish:~# cat /sys/bus/mmc/devices/mmc0\:1388/csd
400e00325b5900001d177f800a40008d
root@napi-nightstarfish:~# cat /sys/bus/mmc/devices/mmc0\:1388/ocr
0x00300000
root@napi-nightstarfish:~# cat /sys/bus/mmc/devices/mmc0\:1388/rca
0x1388
root@napi-nightstarfish:~# cat /sys/bus/mmc/devices/mmc0\:1388/scr
0205848f33333039
root@napi-nightstarfish:~#

В uboot

=> mmc info
Device: mmc@ff500000
Manufacturer ID: 3
OEM: 5344
Name: SA04G
Bus Speed: 50000000
Mode : SD High Speed (50MHz)

Расшифровка SCR (чатгпт)

1) SCR contents (from Linux):

SCR = 02 05 84 8F 33 33 30 39

Decoded:

SCR Structure = 0 (v1.0)

SD Spec = 2.0 + Spec3 → SD 3.0 (UHS-I)

Bus widths = 1-bit and 4-bit supported

Security = CPRM supported

Byte 3 = 0x8F → according to the SD spec, bits indicate:

bit0 = CMD20 supported

bit1 = CMD23 supported

bit2 = CMD48 supported

bit3 = CMD49 supported

Расшифровка CID (чатгпт)

CID #1

ba2345534134474206071c06fe016945

MID: 0xBA

OID: 0x23 0x45 → «#E» (непечатный/нестандартный OID, трактую как hex)

PNM: SA4GB

PRV: 0.6

PSN: 119277310 (0x071C06FE)

MDT: 2022-09 (разбор по формуле: ((cid[13]&0x0F)<<8)|cid[14]) → год=2000+((mdt>>4)&0xFF), месяц=mdt&0xF)
CID #2

e700115a6574746101b135ee4a719523

MID: 0xE7 (похоже на Zetta)

OID: 0x00 0x11 → непечатный (оставляем в hex)

PNM: Zetta

PRV: 0.1

PSN: 2973101642 (0xB135EE4A)

MDT: 2025-05

Что по факту отличается

Производитель/бренд:

— #1: MID=0xBA, имя продукта SA4GB (выглядит как «4GB» линейка). — #2: MID=0xE7, имя продукта Zetta (бренд Zetta виден прямо в PNM).

Версия продукта (PRV):

— #1: 0.6 (более поздняя ревизия конкретной линейки), — #2: 0.1 (самая ранняя ревизия).

Серийный номер (PSN): разные (ожидаемо), у #2 — существенно большее значение.

Дата производства (MDT): — #1: 2022-09, — #2: 2025-05 (свежее).

OID: у обеих — непечатные/нестандартные коды (это нормально: поле OEM/Application ID не обязано быть ASCII).

Место в ядре где идёт чтение регистров карты

https://github.com/torvalds/linux/blob/07d9df80082b8d1f37e05658371b087cb6738770/drivers/mmc/core/sd.c#L1279

#sdnand #kernel #linuxkernel #sys #uboot