Делаю одноплатный компьютер из WIFI-Роутера.. Нужна помощь с Драйвером «atyfb»
Так... Для начала немного предыстории...
Думаю здесь уже многие наверно 'слышали' про такую штуку как «raspberry pi 4 compute module + io board» который вышел пару месяцев назад. (Если нет вкратце объясню... это одноплатный компьютер на ARM процессоре в последнюю модификацию которого была добавлена поддержка PCIe x1).
Так-вот сейчас youtube переполнен роликам в которых народ тычет е PCIe x1 слот на этом компьютере всякую хрень. По типу: Звуковые карты, карты видео захвата, raid -контроллеры, nvme ссд-шки, видеокарты... короче все что можно засунуть, уже туда суют! И как вы думайте что из того списка мозолит больше всего глаза ютуберов? Если кто-то подумал о видеокартах...То поздравляю.. вы угадали! честно говоря я сам не совсем понимаю зачем пихать в одноплатный компьютер GTX1650... но сам факт того что целая куча народа пытается заставить грёбаною видеокарту работать на ARM процессоре заставил меня задуматься... Неужели это так сложно? немного подумав.. мне захотелось тоже попробовать... И я решил купить этот «raspberry pi 4 compute module + io board» но как оказалось его в наличии нигде нет... Становись в очередь и жди 3 месяца или покупай у перекупщиков на ebay в 2 раза дороже... Мдя... Не мой вариант!...
И тут моему взору пал старенький роутер Asus WL-500g... и сразу-же вспомнилось, что там стоит WIFI в MiniPCI слоте... Ну тут вы уже наверное поняли к чему я клоню... Моя больная фантазия увидела в этом, и так уже измученном жизнью роутере видеокарту =) Я уже ранее ему сделал 2 модификации...1я - увеличил объем оперативной памяти с 32Мб до 128Мб (перепаял 2 чипа), 2я - Установил туда debian 7 на ядре от openwrt. Ну думаю настало время 3-тий завершающий модификации по добавлению видеокарты, звуковой карты, клавы и мыши... И воля вот вам одноплатный компьютер на MIPS процессоре =) Думаю ресурсов должно хватить для запуска рабочего стола, doom и эмулятора денди =)
В общем задачу я себе поставил подключить к роутеру видеокарту! ПРИСТУПАЮ!... 1-вым делом начал искать видеокарту для слота miniPCI... нашел одну... MS-9513 ATI Rage XL 8Mb... даже не знал что такое существует... Но к сожалению в продаже я её, нигде не нашел... но зато нашел информацию о том что этот чип должен работать на mips процессорах а это важно в моём случае! Раз уж я не могу приобрести эту карточку то в голову приходит вариант номер 2 переходник miniPCI to PCI и их тоже как назло в продаже нет! (Китайцы где же вы, когда вы так нужны?...) В общем так как я с электроникой на ты! Я решил сделать переходник самостоятельно... всего то нужно было прочитать страниц 40 pci документации и нарисовать в CAD программе переходник... За 2 дня не сильного напряга нарисовал переходник и заказал его на производстве печатных плат у китайцев.... Жду 2 недели... Но не расслабляюсь так как мне еще нужно найти видеокарту ATI Rage XL 8Mb для обыкновенного PCI слота но с ключом на 3.3в что скажу вам не так-то уж и просто так-как практически все карточки 5 вольтовые... Хоть это не составило большого труда.. нашёл её на ближайшей компьютерной барахолке.. за 7$.. Спустя неделю ко мне таки пришли платы «Фотка-1» от китайцев... Спаял одну засунул в роутер «Фотка-2» и воткнул в неё для начала сетевую плату, её не жалко спалить если я где то накосячил с разводкой платы.... Заработало с первого раза! даже модуль ядра подхватило что меня довольно сильно удивило...
Ладно приступаю ко второму этапу сую туда видеокарту «Фотка-3» и запускаю... Плату на шине pci видит! Ура! но картинки нет =( собственно ожыдаеммо модуля ядра веть тоже нет... пересобрал ядро добавил поддержку графики и драйвера atyfb и mach64... Залил в роутер и что вы думайте? Кирпич! Все-таки это не так то и просто заставить из коробки работать видюху на другой архитектуре процессора как минимум из за отсутствия bios который читает rom видюхи и инициализирует регистры в самой видеокарте для работы в так называемом режиме video_bios....
Собственно на этом этапе я и застрял и уже сижу две недели Кое как настроил earlyprintk и и наконец то получил Kernel Panic который openwrt от меня дня 4 прятал...
CFE version 1.0.37 for BCM947XX (32bit,SP,LE)
Build Date: ▒| 10▒▒ 12 22:21:19 CST 2006 (root@localhost.localdomain)
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.
Initializing Arena
Initializing Devices.
et0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.90.7.0
rndis0: Broadcom USB RNDIS Network Adapter (P-t-P)
CPU type 0x29006: 264MHz
Total memory: 134217728 KBytes
Total memory used by CFE: 0x80800000 - 0x8089AF40 (634688)
Initialized Data: 0x808313D0 - 0x80833790 (9152)
BSS Area: 0x80833790 - 0x80834F40 (6064)
Local Heap: 0x80834F40 - 0x80898F40 (409600)
Stack Area: 0x80898F40 - 0x8089AF40 (8192)
Text (code) segment: 0x80800000 - 0x808313D0 (201680)
Boot area (physical): 0x0089B000 - 0x008DB000
Relocation Factor: I:00000000 - D:00000000
Device eth0: hwaddr 00-1B-FC-E2-9F-10, ipaddr 192.168.1.200, mask 255.255.255.0
gateway not set, nameserver not set
Null Rescue Flag.
Reading :: TFTP Server.
Failed.: Timeout occured
Loader:raw Filesys:raw Dev:flash0.os File: Options:(null)
Loading: .. 3712 bytes read
Entry at 0x80001000
Closing network.
Starting program at 0x80001000
[ 0.000000] Linux version 3.18.109 (openwrt@debian) (gcc version 4.8.3 (OpenWrt/Linaro GCC 4.8-2014.04 r49632) ) #5 Fri Dec 18 20:38:41 EET 2020
[ 0.000000] bootconsole [early0] enabled
[ 0.000000] CPU0 revision is: 00029006 (Broadcom BMIPS3300)
[ 0.000000] bcm47xx: Using ssb bus
[ 0.000000] ssb: Found chip with id 0x4704, rev 0x09 and package 0x00
[ 0.000000] Unsupported SPROM revision 0 detected. Will extract v1
[ 0.000000] ssb: Sonics Silicon Backplane found at address 0x18000000
[ 0.000000] Determined physical RAM map:
[ 0.000000] memory: 08000000 @ 00000000 (usable)
[ 0.000000] Initrd not found or empty - disabling initrd
[ 0.000000] Zone ranges:
[ 0.000000] Normal [mem 0x00000000-0x07ffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x00000000-0x07ffffff]
[ 0.000000] Initmem setup node 0 [mem 0x00000000-0x07ffffff]
[ 0.000000] Primary instruction cache 16kB, VIPT, 2-way, linesize 16 bytes.
[ 0.000000] Primary data cache 16kB, 2-way, VIPT, cache aliases, linesize 16 bytes
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512
[ 0.000000] Kernel command line: earlyprintk noinitrd console=ttyS0,115200
[ 0.000000] PID hash table entries: 512 (order: -1, 2048 bytes)
[ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
[ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
[ 0.000000] Memory: 125892K/131072K available (2829K kernel code, 126K rwdata, 560K rodata, 184K init, 282K bss, 5180K reserved, 0K cma-reserved)
[ 0.000000] NR_IRQS:128
[ 0.000000] MIPS: machine is Asus WL500GP V1
[ 0.000000] Console: colour dummy device 80x25
[ 0.000000] Calibrating delay loop... 262.96 BogoMIPS (lpj=1314816)
[ 0.070000] pid_max: default: 32768 minimum: 301
[ 0.070000] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.080000] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.090000] NET: Registered protocol family 16
[ 0.300000] DMA-API: preallocated 65536 debug entries
[ 0.300000] DMA-API: debugging enabled by kernel config
[ 0.310000] Switched to clocksource MIPS
[ 0.640000] PCI host bridge to bus 0000:00
[ 0.650000] pci_bus 0000:00: root bus resource [mem 0x40000000-0x7fffffff]
[ 0.650000] pci_bus 0000:00: root bus resource [io 0x0100-0x07ff]
[ 0.660000] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
[ 0.670000] ssb: PCI: Fixing up bridge 0000:00:00.0
[ 0.670000] ssb: PCI: Fixing up device 0000:00:00.0
[ 0.680000] ssb: PCI: Fixing latency timer of device 0000:00:00.0 to 168
[ 0.690000] pci 0000:00:02.0: BAR 0: assigned [mem 0x40000000-0x40ffffff]
[ 0.700000] pci 0000:00:02.0: BAR 6: assigned [mem 0x41000000-0x4101ffff pref]
[ 0.710000] pci 0000:00:02.0: BAR 2: assigned [mem 0x41020000-0x41020fff]
[ 0.710000] pci 0000:00:02.0: BAR 1: assigned [io 0x0400-0x04ff]
[ 0.720000] pci 0000:00:03.2: BAR 0: assigned [mem 0x41021000-0x410210ff]
[ 0.720000] pci 0000:00:03.0: BAR 4: no space for [io size 0x0020]
[ 0.730000] pci 0000:00:03.0: BAR 4: failed to assign [io size 0x0020]
[ 0.740000] pci 0000:00:03.1: BAR 4: no space for [io size 0x0020]
[ 0.740000] pci 0000:00:03.1: BAR 4: failed to assign [io size 0x0020]
[ 0.760000] NET: Registered protocol family 2
[ 0.760000] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.770000] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.780000] TCP: Hash tables configured (established 1024 bind 1024)
[ 0.780000] TCP: reno registered
[ 0.790000] UDP hash table entries: 256 (order: 0, 4096 bytes)
[ 0.790000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[ 0.800000] NET: Registered protocol family 1
[ 0.870000] futex hash table entries: 256 (order: -1, 3072 bytes)
[ 0.880000] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 0.890000] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[ 0.900000] msgmni has been set to 245
[ 0.900000] io scheduler noop registered
[ 0.910000] io scheduler deadline registered (default)
[ 0.910000] PCI: Enabling device 0000:00:02.0 (0080 -> 0083)
[ 0.920000] ssb: PCI: Fixing up device 0000:00:02.0
[ 0.920000] atyfb: using auxiliary register aperture
[ 0.930000] atyfb: 3D RAGE XL (Mach64 GR, PCI-33) [0x4752 rev 0x27]
[ 0.940000] atyfb: 512K SGRAM (1:1), 14.31818 MHz XTAL, 230 MHz PLL, 83 Mhz MCLK, 63 MHz XCLK
[ 0.940000] atyfb: Unsupported xclk source: 5.
[ 0.950000] Data bus error, epc == 80193240, ra == 801931fc
[ 0.950000] Oops[#1]:
[ 0.950000] CPU: 0 PID: 1 Comm: swapper Not tainted 3.18.109 #5
[ 0.950000] task: 8781c9b8 ti: 8781e000 task.ti: 8781e000
[ 0.950000] $ 0 : 00000000 10008800 c004a400 00800000
[ 0.950000] $ 4 : 00000064 00000000 86d522e8 0000096d
[ 0.950000] $ 8 : 0000002e 73206b6c 6372756f 20203a65
[ 0.950000] $12 : 64657472 0000000e 00000000 6c637820
[ 0.950000] $16 : 86d522e8 86d52000 80364290 8031d358
[ 0.950000] $20 : 86d52778 40000000 80360000 41020000
[ 0.950000] $24 : 00000002 00000000
[ 0.950000] $28 : 8781e000 8781fbf0 80320000 801931fc
[ 0.950000] Hi : 00000000
[ 0.950000] Lo : 0009fe98
[ 0.950000] epc : 80193240 aty_init+0x630/0x9b0
[ 0.950000] Not tainted
[ 0.950000] ra : 801931fc aty_init+0x5ec/0x9b0
[ 0.950000] Status: 10008803 KERNEL EXL IE
[ 0.950000] Cause : 0080001c
[ 0.950000] PrId : 00029006 (Broadcom BMIPS3300)
[ 0.950000] Modules linked in:
[ 0.950000] Process swapper (pid: 1, threadinfo=8781e000, task=8781c9b8, tls=00000000)
[ 0.950000] Stack : 0000005a 00000200 0000004b 80364290 8031d358 000000e6 00000053 0000003f
00000400 800484d0 00000006 00000001 00000000 00000000 00000093 00000000
00000037 00000006 803b68b2 00000006 10008801 00000037 00000000 00000000
00000000 800491b4 00000000 00000006 00000006 003fffff 00000000 00000000
00000000 00000000 803b68b2 00000037 00000000 8008b77c 00000001 000000d0
...
[ 0.950000] Call Trace:
[ 0.950000] [<80193240>] aty_init+0x630/0x9b0
[ 0.950000] [<80193854>] atyfb_pci_probe+0x294/0x5b0
[ 0.950000] [<8016edb8>] pci_device_probe+0x68/0xd0
[ 0.950000] [<801c1958>] driver_probe_device+0xcc/0x218
[ 0.950000] [<801c1b84>] __driver_attach+0x7c/0xb4
[ 0.950000] [<801bfea0>] bus_for_each_dev+0x98/0xa8
[ 0.950000] [<801c108c>] bus_add_driver+0x104/0x1ec
[ 0.950000] [<801c2050>] driver_register+0xac/0x100
[ 0.950000] [<80382748>] atyfb_init+0x60/0x314
[ 0.950000] [<8000a4f8>] do_one_initcall+0x148/0x204
[ 0.950000] [<80372cd4>] kernel_init_freeable+0x150/0x208
[ 0.950000] [<80005f0c>] kernel_init+0x10/0x114
[ 0.950000] [<800014a8>] ret_from_kernel_thread+0x14/0x1c
[ 0.950000]
[ 0.950000]
Code: 10400006 3c028036 8e020348 <8c4300a0> 34630010 ac4300a0 3c028036 244242c8 ae2202b0
[ 1.160000] ---[ end trace 012648158a1832d7 ]---
[ 1.170000] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
[ 1.170000]
[ 1.170000] Rebooting in 100 seconds..
Так а теперь к делу... Умный человек! который прочел моё повествование подскажи мне пожалуйста что я делаю не так? =) как исправить эту гребаною ошибку?
[ 0.940000] atyfb: Unsupported xclk source: 5.
[ 0.950000] Data bus error, epc == 80193240, ra == 801931fc