Автор Тема: сборка системы BuildRoot  (Прочитано 1534 раз)

Оффлайн Olej

сборка системы BuildRoot
« : Июнь 29, 2018, 01:55:00 pm »
Имеется в виду сборка минимальной Linux системы для встраиваемых (embedded) применений, с помощью такого инструментария сборки как BuildRoot.
Про BuildRoot (где взять, как собирать образ, ...) уже писалось вскользь: Xenomai & realtime - не буду повторяться.

Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #1 : Июнь 29, 2018, 02:08:30 pm »
BuildRoot (в свежих версиях 2018г., а проект давно и активно развивается - 4 стабильных релиза каждый год на протяжении лет 10-ти) "знает" практически все модели Orange Pi - т.е. имеет для них дефаултные конфигурации с деревом устройств и т.д.
[olej@xenix buildroot-master]$ make list-defconfigs | grep orangepi
  orangepi_lite_defconfig             - Build for orangepi_lite
  orangepi_one_defconfig              - Build for orangepi_one
  orangepi_pc2_defconfig              - Build for orangepi_pc2
  orangepi_pc_defconfig               - Build for orangepi_pc
  orangepi_pc_plus_defconfig          - Build for orangepi_pc_plus
  orangepi_plus_defconfig             - Build for orangepi_plus
  orangepi_prime_defconfig            - Build for orangepi_prime
  orangepi_win_defconfig              - Build for orangepi_win
  orangepi_zero_defconfig             - Build for orangepi_zero
  orangepi_zero_plus2_defconfig       - Build for orangepi_zero_plus2
Что оно позволяет собрать для Orange Pi? :
- загружаемый образ .img для переноса на SD-карточку ...
- с любым на выбор ядром (версия) ...
- с любыми дополнительными патчами от сборщика...
- с комплектом на выбор устанавливаемых программ ...
- с широкими возможностями выбора конфигурации (BuzyBox | Bash | zsh ... systemd | systemV ... и т.д.)
Все исходники необходимые (заказанные) для сборки оно подтягивает само с помощью wget из сети.

Чем отличается, например, от сборки Armbian (это самое приличное, как мне кажется, из того что я видел):
- собирается не какой-то дистрибутив (Debian, Ubuntu, ...) а custom Linux в требуемом составе (для встраивания под конкретные цели)
- сборка получается минимального размера
- для сборки не требуется жёстко заданное окружение сборки (как Ubuntu 18.04 под Armbian), собирается под чем угодно ... поэтому сборка не в виртуальной машине, а в любой имеющейся нативно
- для сборки выбирается любое ядро Linux на выбор, а не только последнее текущее (утверждается, что без проблем загружается 4.17)


Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #2 : Июнь 29, 2018, 02:22:30 pm »
Что оно позволяет собрать для Orange Pi? :
Но есть некоторые вопросы, непонятки ... если бы не было - я бы сюда не писал, и вас не беспокоил :D

Собираю дефаултный (их) образ для Orange Pi One - создаём начальную дефаултную конфигурацию:
[olej@xenix buildroot-master]$ make orangepi_one_defconfig
mkdir -p /home/olej/buildroot-master/output/build/buildroot-config/lxdialog
PKG_CONFIG_PATH="" make CC="/usr/bin/gcc" HOSTCC="/usr/bin/gcc" \
    obj=/home/olej/buildroot-master/output/build/buildroot-config -C support/kconfig -f Makefile.br conf
/usr/bin/gcc -D_GNU_SOURCE -D_DEFAULT_SOURCE  -DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1 -DLOCALE  -I/home/olej/buildroot-master/output/build/buildroot-config -DCONFIG_=\"\"   /home/olej/buildroot-master/output/build/buildroot-config/conf.o /home/olej/buildroot-master/output/build/buildroot-config/zconf.tab.o  -o /home/olej/buildroot-master/output/build/buildroot-config/conf
#
# configuration written to /home/olej/buildroot-master/.config
#
Конфигуратор:
[olej@xenix buildroot-master]$ make nconfig
...
 
Или так:
[olej@xenix buildroot-master]$ make menuconfig
...
В конфигураторе я пока (!!!) ничего не меняю, кроме выбора конкретной версии ядра: 4.9.51 (мне так надо ;)).
Дальше можно сделать (а можно и не делать ;)):
[olej@xenix buildroot-master]$ time make source
...
Это чтобы подтянуть все исходники заранее, а не грузить их по ходу сборки (можно дальше сборку без сети делать).
Всё... Сборка ... например, так:
[olej@xenix buildroot-master]$ time make | tee -a make.hist
...
>>>   Executing post-image script support/scripts/genimage.sh
vfat(boot.vfat): adding file 'zImage' as 'zImage' ...
vfat(boot.vfat): adding file 'sun8i-h3-orangepi-one.dtb' as 'sun8i-h3-orangepi-one.dtb' ...
vfat(boot.vfat): adding file 'boot.scr' as 'boot.scr' ...
hdimage(sdcard.img): adding partition 'u-boot' from 'u-boot-sunxi-with-spl.bin' ...
hdimage(sdcard.img): adding partition 'boot' (in MBR) from 'boot.vfat' ...
hdimage(sdcard.img): adding partition 'rootfs' (in MBR) from 'rootfs.ext4' ...
hdimage(sdcard.img): writing MBR

real    38m16,006s
user    74m49,294s
sys     16m18,638s
« Последнее редактирование: Июнь 29, 2018, 02:31:51 pm от Olej »

Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #3 : Июнь 29, 2018, 02:34:03 pm »
Всё... Сборка ... например, так:
После этого в каталоге output/images имеем результат:
[olej@xenix images]$ pwd
/home/olej/buildroot-master/output/images

[olej@xenix images]$ ls -l
итого 82388
-rw-r--r-- 1 olej olej      301 июн 29 13:10 boot.scr
-rw-r--r-- 1 olej olej 10485760 июн 29 13:16 boot.vfat
-rw-r--r-- 1 olej olej 62914560 июн 29 13:16 rootfs.ext2
lrwxrwxrwx 1 olej olej       11 июн 29 13:16 rootfs.ext4 -> rootfs.ext2
-rw-r--r-- 1 olej olej 74448896 июн 29 13:16 sdcard.img
-rw-r--r-- 1 olej olej    13008 июн 29 13:16 sun8i-h3-orangepi-one.dtb
-rw-r--r-- 1 olej olej   343118 июн 29 13:10 u-boot.bin
-rw-r--r-- 1 olej olej   548864 июн 29 13:10 u-boot-sunxi-with-spl.bin
-rw-r--r-- 1 olej olej  3562208 июн 29 13:16 zImage
Остаётся накатить sdcard.img на SD-карту и грузить...
Обратите внимание, что образ, хотя пока и самый минимальный - 75Mb! (не 7.5Gb ;D)
« Последнее редактирование: Июнь 29, 2018, 02:35:50 pm от Olej »

Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #4 : Июнь 29, 2018, 02:42:38 pm »
Остаётся накатить sdcard.img на SD-карту и грузить...
[olej@xenix images]$ ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdc  /dev/sdc1  /dev/sdc2
SD-карта вставлена в переходник SD/USB.
[olej@xenix images]$ sudo dd if=sdcard.img of=/dev/sdc bs=8M conv=sync
8+1 записей получено
9+0 записей отправлено
75497472 байт (75 MB, 72 MiB) скопирован, 0,10895 s, 693 MB/s

[olej@xenix images]$ sync
Последнее действие (sync), при использовании dd (не знаю как других программ записи?) - обязательно (сбросить дисковые кеши на носитель - без этого носитель, временами, оказывается битый ... проверено).

Извлекаю носитель и снова подключаю - перемонтируется:
[olej@xenix images]$ sudo parted /dev/sdc print free
Модель: Generic Mass-Storage (scsi)
Диск /dev/sdc: 1978MB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos
Флаги диска:

Номер  Начало  Конец   Размер  Тип      Файловая система  Флаги
       16,4kB  1049kB  1032kB           Свободное место
 1     1049kB  11,5MB  10,5MB  primary  fat16             загрузочный, lba
 2     11,5MB  548MB   537MB   primary  ext4
       548MB   1978MB  1429MB           Свободное место
[olej@xenix images]$ mount | grep /dev/sdc
/dev/sdc1 on /run/media/olej/A4B6-EE50 type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
/dev/sdc2 on /run/media/olej/5aa26454-b1c7-42bb-9d2d-0e60044c81f1 type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2)
[olej@xenix images]$ ls -l /run/media/olej/A4B6-EE50
итого 3496
-rw-r--r-- 1 olej olej     301 июн 29  2018 boot.scr
-rw-r--r-- 1 olej olej   13008 июн 29  2018 sun8i-h3-orangepi-one.dtb
-rw-r--r-- 1 olej olej 3562208 июн 29  2018 zImage
[olej@xenix images]$ ls -l /run/media/olej/5aa26454-b1c7-42bb-9d2d-0e60044c81f1
итого 28
drwxr-xr-x 2 root root  2048 июн 29 13:16 bin
drwxr-xr-x 4 root root  1024 июн 25 00:54 dev
drwxr-xr-x 5 root root  1024 июн 29 13:16 etc
drwxr-xr-x 3 root root  1024 июн 29 13:16 lib
lrwxrwxrwx 1 root root     3 июн 29 12:49 lib32 -> lib
lrwxrwxrwx 1 root root    11 июн 29 13:00 linuxrc -> bin/busybox
drwx------ 2 root root 12288 июн 29 13:16 lost+found
drwxr-xr-x 2 root root  1024 июн 25 00:54 media
drwxr-xr-x 2 root root  1024 июн 25 00:54 mnt
drwxr-xr-x 2 root root  1024 июн 25 00:54 opt
drwxr-xr-x 2 root root  1024 июн 25 00:54 proc
drwx------ 2 root root  1024 июн 25 00:54 root
drwxr-xr-x 2 root root  1024 июн 25 00:54 run
drwxr-xr-x 2 root root  1024 июн 29 13:16 sbin
drwxr-xr-x 2 root root  1024 июн 25 00:54 sys
drwxrwxrwt 2 root root  1024 июн 25 00:54 tmp
drwxr-xr-x 6 root root  1024 июн 29 13:16 usr
drwxr-xr-x 4 root root  1024 июн 29 13:16 var
Всё ... можно вставлять в Orange Pi и грузить...

Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #5 : Июнь 29, 2018, 02:44:50 pm »
Всё ... можно вставлять в Orange Pi и грузить...
Но гружу, для убедительности, с дебажной UART консолью...
И что мы видим:
- это U-boot:
U-Boot SPL 2018.01 (Jun 29 2018 - 13:10:34)
DRAM: 512 MiB
Trying to boot from MMC1


U-Boot 2018.01 (Jun 29 2018 - 13:10:34 +0300) Allwinner Technology

CPU:   Allwinner H3 (SUN8I 1680)
Model: Xunlong Orange Pi One
DRAM:  512 MiB
MMC:   SUNXI SD/MMC: 0
*** Warning - bad CRC, using default environment

In:    serial
Out:   vidconsole
Err:   vidconsole
Net:   phy interface0
eth0: ethernet@1c30000
starting USB...
USB0:   USB EHCI 1.00
USB1:   USB OHCI 1.0
scanning bus 0 for devices... 1 USB Device(s) found
scanning bus 1 for devices... 3 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
reading /boot.scr
301 bytes read in 16 ms (17.6 KiB/s)
## Executing script at 43100000
reading zImage
3562208 bytes read in 324 ms (10.5 MiB/s)
reading sun8i-h3-orangepi-one.dtb
13008 bytes read in 27 ms (469.7 KiB/s)
## Flattened Device Tree blob at 43000000
   Booting using the fdt blob at 0x43000000
   Using Device Tree in place at 43000000, end 430062cf
Cannot setup simplefb: node not found

Starting kernel ...
Дальше пошло ядро грузиться (покажу только самые характерные места):
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.9.51 (olej@xenix.localdomain) (gcc version 7.3.0 (Buildroot 2018.08-git) ) #1 SMP Fri Jun 29 13:15:56 EEST 2018
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
...
[    0.034028] Brought up 4 CPUs
[    0.034049] SMP: Total of 4 processors activated (192.00 BogoMIPS).
...
[    0.039186] NET: Registered protocol family 16
...
[    0.051236] usbcore: registered new interface driver usbfs
[    0.051292] usbcore: registered new interface driver hub
[    0.051344] usbcore: registered new device driver usb
...
[    0.060843] NET: Registered protocol family 2
[    0.061299] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[    0.061348] TCP bind hash table entries: 4096 (order: 3, 32768 bytes)
[    0.061410] TCP: Hash tables configured (established 4096 bind 4096)
[    0.061454] UDP hash table entries: 256 (order: 1, 8192 bytes)
[    0.061485] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
[    0.061644] NET: Registered protocol family 1
[    0.061955] RPC: Registered named UNIX socket transport module.
[    0.061966] RPC: Registered udp transport module.
[    0.061971] RPC: Registered tcp transport module.
[    0.061976] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.063673] workingset: timestamp_bits=30 max_order=17 bucket_order=0
[    0.071779] NFS: Registering the id_resolver key type
...
[    0.133286] Serial: 8250/16550 driver, 8 ports, IRQ sharing disabled
[    0.135970] console [ttyS0] disabled
[    0.156116] 1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 30, base_baud = 1500000) is a U6_16550A
[    0.756200] console [ttyS0] enabled
...
[    0.772353] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    0.778898] ehci-platform: EHCI generic platform driver
[    0.784315] ehci-platform 1c1b000.usb: EHCI Host Controller
[    0.789902] ehci-platform 1c1b000.usb: new USB bus registered, assigned bus number 1
[    0.797783] ehci-platform 1c1b000.usb: irq 24, io mem 0x01c1b000
[    0.832557] ehci-platform 1c1b000.usb: USB 2.0 started, EHCI 1.00
[    0.839356] hub 1-0:1.0: USB hub found
[    0.843149] hub 1-0:1.0: 1 port detected
[    0.847429] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    0.853648] ohci-platform: OHCI generic platform driver
[    0.859014] ohci-platform 1c1b400.usb: Generic Platform OHCI controller
[    0.865653] ohci-platform 1c1b400.usb: new USB bus registered, assigned bus number 2
[    0.873490] ohci-platform 1c1b400.usb: irq 25, io mem 0x01c1b400
[    0.947173] hub 2-0:1.0: USB hub found
[    0.950946] hub 2-0:1.0: 1 port detected
[    0.955876] sun6i-rtc 1f00000.rtc: rtc core: registered rtc-sun6i as rtc0
[    0.962676] sun6i-rtc 1f00000.rtc: RTC enabled
[    0.967216] i2c /dev entries driver
...
[    1.014357] sunxi-wdt 1c20ca0.watchdog: Watchdog enabled (timeout=16 sec, nowayout=0)
...
[    1.033596] sunxi-mmc 1c0f000.mmc: Got CD GPIO
[    1.092557] sunxi-mmc 1c0f000.mmc: base:0xe0875000 irq:23
[    1.098987] usbcore: registered new interface driver usbhid
[    1.104590] usbhid: USB HID core driver
[    1.109222] NET: Registered protocol family 17
[    1.113713] can: controller area network core (rev 20120528 abi 9)
[    1.120101] NET: Registered protocol family 29
...
[    1.178079] Waiting for root device /dev/mmcblk0p2...
[    1.220672] mmc0: host does not support reading read-only switch, assuming write-enable
[    1.228769] mmc0: new SD card at address 8da8
[    1.233660] mmcblk0: mmc0:8da8 SU02G 1.84 GiB
[    1.240174]  mmcblk0: p1 p2
[    1.303363] EXT4-fs (mmcblk0p2): couldn't mount as ext3 due to feature incompatibilities
[    1.312150] EXT4-fs (mmcblk0p2): couldn't mount as ext2 due to feature incompatibilities
[    1.328136] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    1.336281] VFS: Mounted root (ext4 filesystem) readonly on device 179:2.
[    1.343711] devtmpfs: mounted
[    1.347744] Freeing unused kernel memory: 1024K
[    1.468031] random: fast init done
[    1.471494] EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered
Starting logging: OK
Starting network: Waiting for interface eth0 to appear
[    1.612563] usb 2-1: new full-speed USB device number 2 using ohci-platform
[    1.881647] hub 2-1:1.0: USB hub found
[    1.886494] hub 2-1:1.0: 4 ports detected
[    2.212547] usb 2-1.2: new low-speed USB device number 3 using ohci-platform
[    2.386853] input: Logitech USB Keyboard as /devices/platform/soc/1c1b400.usb/usb2/2-1/2-1.2/2-1.2:1.0/0003:046D:C31C.0001/input/input0
[    2.463192] hid-generic 0003:046D:C31C.0001: input: USB HID v1.10 Keyboard [Logitech USB Keyboard] on usb-1c1b400.usb-1.2/input0
[    2.488730] input: Logitech USB Keyboard as /devices/platform/soc/1c1b400.usb/usb2/2-1/2-1.2/2-1.2:1.1/0003:046D:C31C.0002/input/input1
[    2.562716] hid-generic 0003:046D:C31C.0002: input: USB HID v1.10 Device [Logitech USB Keyboard] on usb-1c1b400.usb-1.2/input1
............... timeout!
run-parts: /etc/network/if-pre-up.d/wait_iface: exit status 1
FAIL
Вот здесь в 1-й раз возникает что-то похожее на ошибку, с сетевым интерфейсом...
И дальше:
Welcome to Buildroot for the Orange Pi One
OrangePi_One login: root
# uname -a
Linux OrangePi_One 4.9.51 #1 SMP Fri Jun 29 13:15:56 EEST 2018 armv7l GNU/Linux
# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
# ifconfig -a
lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
Всё ... login и т.д.

Вопросы (может кому кинется в глаза):
- почему не поднялся eth0 интерфейс по DHCP?
- почему инициализировался UART терминал, но не произошло создание консолей на локальном мониторе HDMI? что нужно добавить ... как-то я туплю :(
« Последнее редактирование: Июнь 29, 2018, 02:59:23 pm от Olej »

Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #6 : Июнь 29, 2018, 03:05:18 pm »
Всё ... login и т.д.
# uname -a
Linux OrangePi_One 4.9.51 #1 SMP Fri Jun 29 13:15:56 EEST 2018 armv7l GNU/Linux

# ls /bin
arch           dumpkmap       ln             pidof          sleep
ash            echo           login          ping           stty
busybox        egrep          ls             pipe_progress  su
cat            false          lsattr         printenv       sync
chattr         fdflush        mkdir          ps             tar
chgrp          fgrep          mknod          pwd            touch
chmod          getopt         mktemp         resume         true
chown          grep           more           rm             umount
cp             gunzip         mount          rmdir          uname
cpio           gzip           mountpoint     run-parts      usleep
date           hostname       mt             sed            vi
dd             kill           mv             setarch        watch
df             link           netstat        setpriv        zcat
dmesg          linux32        nice           setserial
dnsdomainname  linux64        nuke           sh

# ls /usr/bin
[            eject        last         nslookup     shred        unxz
[[           env          ldd          od           sort         unzip
ar           expr         less         openvt       strings      uptime
awk          factor       logger       passwd       svc          uudecode
basename     fallocate    logname      paste        tail         uuencode
bunzip2      find         lsof         patch        tee          vlock
bzcat        flock        lspci        printf       telnet       w
chrt         fold         lsscsi       readlink     test         wc
chvt         free         lsusb        realpath     tftp         wget
cksum        fuser        lzcat        renice       time         which
clear        getconf      lzma         reset        top          who
cmp          head         lzopcat      resize       tr           whoami
crontab      hexdump      md5sum       seq          traceroute   xargs
cut          hexedit      mesg         setfattr     truncate     xxd
dc           hostid       microcom     setkeycodes  tty          xz
deallocvt    id           mkfifo       setsid       uniq         xzcat
diff         install      mkpasswd     sha1sum      unix2dos     yes
dirname      ipcrm        nl           sha256sum    unlink
dos2unix     ipcs         nohup        sha3sum      unlzma
du           killall      nproc        sha512sum    unlzop

# ls /sbin
arp                init               makedevs           setconsole
blkid              insmod             mdev               start-stop-daemon
devmem             ip                 mkdosfs            sulogin
fdisk              ipaddr             mke2fs             swapoff
freeramdisk        iplink             mkswap             swapon
fsck               ipneigh            modprobe           switch_root
fstrim             iproute            nameif             sysctl
getty              iprule             pivot_root         syslogd
halt               iptunnel           poweroff           udhcpc
hdparm             klogd              reboot             uevent
hwclock            ldconfig           rmmod              vconfig
ifconfig           loadkmap           route              watchdog
ifdown             losetup            run-init
ifup               lsmod              runlevel

# ls /usr/sbin
addgroup     crond        ether-wake   i2cdetect    inetd        rdate
adduser      delgroup     fbset        i2cdump      killall5     readprofile
arping       deluser      fdformat     i2cget       loadfont     setlogcons
chroot       dnsd         fsfreeze     i2cset       partprobe    ubirename
и т.д.
# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                55397      2642     48455   5% /
devtmpfs                255348         0    255348   0% /dev
tmpfs                   255860         0    255860   0% /dev/shm
tmpfs                   255860        24    255836   0% /tmp
tmpfs                   255860        16    255844   0% /run

Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #7 : Июнь 30, 2018, 04:00:36 pm »
- почему инициализировался UART терминал, но не произошло создание консолей на локальном мониторе HDMI? что нужно добавить ... как-то я туплю :(
Пересобрал систему с инициализацией systemd (мне такое поведение привычнее и понятней).
# ls -w120 /dev/tty*
/dev/tty    /dev/tty38  /dev/ttyS1  /dev/ttyba  /dev/ttydb  /dev/ttypc  /dev/ttyrd  /dev/ttyte  /dev/ttyvf  /dev/ttyy0
/dev/tty0   /dev/tty39  /dev/ttyS2  /dev/ttybb  /dev/ttydc  /dev/ttypd  /dev/ttyre  /dev/ttytf  /dev/ttyw0  /dev/ttyy1
/dev/tty1   /dev/tty4   /dev/ttyS3  /dev/ttybc  /dev/ttydd  /dev/ttype  /dev/ttyrf  /dev/ttyu0  /dev/ttyw1  /dev/ttyy2
# stty < /dev/tty3
speed 38400 baud; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-brkint -imaxbel iutf8

# systemctl status getty@tty3.service
● getty@tty3.service - Getty on tty3
   Loaded: loaded (/usr/lib/systemd/system/getty@.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:agetty(8)
           man:systemd-getty-generator(8)
           http://0pointer.de/blog/projects/serial-console.html

# systemctl start getty@tty3.service

# stty < /dev/tty3
speed 38400 baud; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-brkint -icrnl -imaxbel
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

# systemctl status getty@tty3.service
● getty@tty3.service - Getty on tty3
   Loaded: loaded (/usr/lib/systemd/system/getty@.service; disabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-01-28 16:16:22 UTC; 1h 26min ago
     Docs: man:agetty(8)
           man:systemd-getty-generator(8)
           http://0pointer.de/blog/projects/serial-console.html
 Main PID: 188 (getty)
   CGroup: /system.slice/system-getty.slice/getty@tty3.service
           └─188 /sbin/getty -L tty3 115200 vt100

Jan 28 16:16:22 OrangePi_One systemd[1]: Started Getty on tty3.
Такое впечатление, что терминальная система инициализирована...
И локальная клавиатура (терминала!) воспринимается - по крайней мере Ctrl+Alt+Del приводит к перезагрузке, что я и вижу на UART отладочной консоли.
Но просто такое впечатление, что HDMI видео каким-то образом не инициализируется ... такое его состояние как "нет сигнала".
Но тот же монитор, на том же HDMI, с тем же переходником HDMI-VGA отображает после загрузки Armbian сборки текстовую консоль с login...
Куда копать?


Оффлайн AlDemin

  • Житель
  • ****
  • Сообщений: 473
  • Лайков: 157
  • Карма: +23/-1
  • OPi, OPi+, OPiOne, OPiZero, OPiPC2, BPi, RPiB.
    • Просмотр профиля
Re: сборка системы BuildRoot
« Ответ #8 : Июнь 30, 2018, 07:26:53 pm »
Цитата: Olej
Куда копать?
В сторону драйвера дисплея, в mainline ядре поддержки Н3 до сих пор нет.
Сейчас пока всё делается через U-Boot, он сам настраивает HDMI, создает под это фреймбуфер и передает его ядру в готовом виде, не помню как эта технология называется.
Ядро работает только с /dev/fb*. посмотри есть они у тебя?
И кстати u-boot на дисплей что ни будь выводит?

Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #9 : Июль 01, 2018, 12:44:58 pm »
Сейчас пока всё делается через U-Boot, он сам настраивает HDMI, создает под это фреймбуфер и передает его ядру в готовом виде, не помню как эта технология называется.
Не означает ли это, что если U-boot подменить, например, от Armbian, то он сделает инициализацию и загрузит собранный образ?
Ядро работает только с /dev/fb*. посмотри есть они у тебя?
# ls -l /dev/fb*
ls: /dev/fb*: No such file or directory
И кстати u-boot на дисплей что ни будь выводит?
Имеется в виду локальный дисплей, монитор? Нет, на него ничего не выводится, ни с U-boot, ни дальше системой - монитор показывает заставку от DELL так же, как он это делает при полном отсутствии сигнала.
Весь вывод, начиная от U-boot идет на /dev/ttyS0 (которая и есть единственная инициализированная консоль) и дальше через UART на внешний отладочный компьютер:
# ls -w120 /dev/ttyS*
/dev/ttyS0  /dev/ttyS1  /dev/ttyS2  /dev/ttyS3  /dev/ttyS4  /dev/ttyS5  /dev/ttyS6  /dev/ttyS7
 
# stty < /dev/ttyS0
speed 115200 baud; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol =
; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-brkint ixoff -imaxbel
-iexten

# stty < /dev/ttyS1
stty: standard input: Input/output error

Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #10 : Июль 01, 2018, 01:01:06 pm »
Весь вывод, начиная от U-boot идет на /dev/ttyS0 (которая и есть единственная инициализированная консоль) и дальше через UART на внешний отладочный компьютер:
С одной стороны ... уже сейчас (и это не предел совершенства ;)) в результате получается полновесная Linux система для специального embedded использования, размером файловой системы в 73 Mb "за всё про всё":
# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root              1858934     72341   1705259   4% /
devtmpfs                255348         0    255348   0% /dev
tmpfs                   255860         0    255860   0% /dev/shm
tmpfs                   255860      1188    254672   0% /run
tmpfs                   255860         0    255860   0% /sys/fs/cgroup
tmpfs                   255860         0    255860   0% /tmp
С привычным набором CLI команд Linux ... например, только /bin - больше 1000 утилит:
# ls -w120 /bin | wc -l
350
И этого могло бы вполне хватать для именно embedded применения, более чем ... дальше нужно копать как-раз в сторону realtime характеристик.
Сюда легко сборкой BuildRoot добавить ALSA утилиты для звука и т.п.

Но, с другой стороны, хотелось бы (привычнее) иметь не 1 консоль на UART, а 7 штук /dev/tty0 - /dev/tty6.

И чего никак не могу взять в толк - не проходит инициализация сетевого интерфейса eth0 ... он, может, тоже не очень нужен для ряда embedded использований, но через него очень удобно иметь сколько угодно SSH отладочных сессий.


Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #11 : Июль 01, 2018, 03:39:48 pm »
Цитата: Olej
Куда копать?
В сторону драйвера дисплея, в mainline ядре поддержки Н3 до сих пор нет.
Сейчас пока всё делается через U-Boot, он сам настраивает HDMI, создает под это фреймбуфер и передает его ядру в готовом виде, не помню как эта технология называется.
Ядро работает только с /dev/fb*. посмотри есть они у тебя?
И кстати u-boot на дисплей что ни будь выводит?
Похоже, что то, о чём вы пишете, на форуме Armbian (а они в своих сборках эту проблему решают) обсуждается здесь (2 темы) ... если это не то, то вы меня поправьте ;):
H2+/H3/H5/A64 Disp2 U-Boot video driver
Цитировать
Posted November 10, 2016
I managed to write H3 HDMI driver for mainline U-Boot. Source can be found here:
H3/H5/A64 DRM display driver
Цитировать
I think Icenowy's linux git is only A64 oriented. For example, she added non-optional regulator to HDMI driver, which doesn't exist on OrangePi PC2. There may be more hidden issues...
P.S. Пока я только зафиксирую ссылки, а со смыслом буду разбираться потом...

Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #12 : Июль 01, 2018, 04:33:57 pm »
Имеется в виду сборка минимальной Linux системы для встраиваемых (embedded) применений, с помощью такого инструментария сборки как BuildRoot.
Интересно BuilRoot собирает :-\
Это из загруженной системы:
# ls
bin         lib         media       root        sys
dev         lib32       mnt         run         tmp
etc         linuxrc     opt         sbin        usr
home        lost+found  proc        srv         var

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root              1858934     96925   1680675   5% /
devtmpfs                255348         0    255348   0% /dev
tmpfs                   255860         0    255860   0% /dev/shm
tmpfs                   255860      1196    254664   0% /run
tmpfs                   255860         0    255860   0% /sys/fs/cgroup
tmpfs                   255860         0    255860   0% /tmp

# mount
/dev/mmcblk0p2 on / type ext4 (rw,relatime,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=255348k,nr_inodes=63837,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
Т.е. он загрузочный раздел №1 (FAT32) даже не монтирует как /boot:
# ls /dev/mm*
/dev/mmcblk0    /dev/mmcblk0p1  /dev/mmcblk0p2

# fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 1.9 GiB, 1977614336 bytes, 3862528 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x414fe4b2

Device         Boot Start     End Sectors  Size Id Type
/dev/mmcblk0p1 *     2048   22527   20480   10M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      22528 3862527 3840000  1.9G 83 Linux
Образ он создаёт ... по классике (в отличие от Armbian): FAT32 раздел загрузочный + Linux / раздел EXT2

Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #13 : Июль 01, 2018, 04:42:41 pm »
Т.е. он загрузочный раздел №1 (FAT32) даже не монтирует как /boot:
но ничего мне не мешает примонтировать его прямо "по-ходу" чтобы рассмотреть ... и вам показать ;):
# mkdir /mnt/boot

# mount -tvfat /dev/mmcblk0p1 /mnt/boot
 
# ls -la /mnt/boot
total 3523
drwxr-xr-x    2 root     root         16384 Jan  1  1970 .
drwxr-xr-x    3 root     root          1024 Jan 28 16:35 ..
-rwxr-xr-x    1 root     root           301 Jun 29  2018 boot.scr
-rwxr-xr-x    1 root     root         13008 Jun 29  2018 sun8i-h3-orangepi-one.dtb
-rwxr-xr-x    1 root     root       3572480 Jun 29  2018 zImage
И нет там больше ничего ... ни скрытого, ни явного...
Вот этот sun8i-h3-orangepi-one.dtb он взял, точнее скомпилировал из sun8i-h3-orangepi-one.dts, который находится в дереве исходников используемого ядра, у меня это 4.9.51:
# uname -a
Linux OrangePi_One 4.9.51 #1 SMP Fri Jun 29 19:27:00 EEST 2018 armv7l GNU/Linux
По идее, этот .dts - из mainline ядра, и он может не соответствовать каким-то не включённым девайсам Opramge Pi...
« Последнее редактирование: Июль 01, 2018, 04:44:29 pm от Olej »

Оффлайн Olej

Re: сборка системы BuildRoot
« Ответ #14 : Июль 01, 2018, 09:20:20 pm »
Вопросы (может кому кинется в глаза):
- почему не поднялся eth0 интерфейс по DHCP?
По поводу сети...
Вот начальный старт U-boot на собранном BuildRoot минимальном образе: 
U-Boot SPL 2018.01 (Jun 29 2018 - 19:21:08)
DRAM: 512 MiB
Trying to boot from MMC1

U-Boot 2018.01 (Jun 29 2018 - 19:21:08 +0300) Allwinner Technology

CPU:   Allwinner H3 (SUN8I 1680)
Model: Xunlong Orange Pi One
DRAM:  512 MiB
MMC:   SUNXI SD/MMC: 0
*** Warning - bad CRC, using default environment

In:    serial
Out:   vidconsole
Err:   vidconsole
Net:   phy interface0
eth0: ethernet@1c30000
starting USB...
USB0:   USB EHCI 1.00
USB1:   USB OHCI 1.0
scanning bus 0 for devices... 1 USB Device(s) found
scanning bus 1 for devices... 4 USB Device(s) found
       scanning usb for storage devices... 1 Storage Device(s) found
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
reading /boot.scr
301 bytes read in 16 ms (17.6 KiB/s)
## Executing script at 43100000
reading zImage
3572480 bytes read in 324 ms (10.5 MiB/s)
reading sun8i-h3-orangepi-one.dtb
13008 bytes read in 27 ms (469.7 KiB/s)
...
При инициализации U-boot он пишет (ещё раз повторю эти строки):
Net:   phy interface0
eth0: ethernet@1c30000
Т.е., по идее Ethernet-чип прописан в том дереве устройств sun8i-h3-orangepi-one.dtb, которое он взял из дерева mainline ядра?
Тогда интерфейсу eth0 не хватает какой-то инициализации средствами Linux ... типа /etc/if-up ?