Ich benutze uClinux auf einer SmartFusion2 als Teil eines Universitätsteams, das einen kleinen Kubus-Satelliten baut. Allerdings bin ich nicht besonders erfahren im Linux-Kernel, und dieses Problem hat mich für ein paar Tage ratlos gemacht. Ich versuche, die SmartFusion ein Programm beim Booten zu starten. Momentan ist das einzige .uImage, das dies tut, die Test-Hallo-Datei. Ich versuche, den Prozess für ein anderes Programm neu zu erstellen, stoße jedoch auf einige Schwierigkeiten.Programm beim Booten mit initramfs starten
in meinem hallo Verzeichnis habe ich die folgenden Dateien: hello.busybox, hello.kernel.M2S, help.txt, hello.uImage, Makefile, hello.initramfs, hallo (Verzeichnis)
im hallo Unterverzeichnis (Projekte/hallo/hallo):
hallo (ausführbare), hello.c, hello.gdb, hello.h, hello.o, Makefile
zu versuchen, die uImage zu bekommen zu starten und eine andere laufen Programm, ich habe eine Kopie von meinem Projekt/Hallo/Hallo Verzeichnis und benannte es "Auf Wiedersehen", mit ein paar kleinere Änderungen in den .h und .c Dateien zu Testzwecken. Jetzt versuche ich, die ausführbare Datei in Projekten Hallo/Auf Wiedersehen zu bekommen, um beim Booten zu laufen.
Meine initramfs Datei sah ursprünglich wie folgt aus:
# This is a very simple, default initramfs
dir /dev 0755 0 0
nod /dev/console 0600 0 0 c 5 1
nod /dev/tty 0666 0 0 c 5 0
nod /dev/null 0600 0 0 c 1 3
nod /dev/mem 0600 0 0 c 1 1
nod /dev/kmem 0600 0 0 c 1 2
nod /dev/zero 0600 0 0 c 1 5
nod /dev/random 0600 0 0 c 1 8
nod /dev/urandom 0600 0 0 c 1 9
dir /dev/pts 0755 0 0
nod /dev/ptmx 0666 0 0 c 5 2
nod /dev/ttyS0 0666 0 0 c 4 64
nod /dev/ttyS1 0666 0 0 c 4 65
nod /dev/ttyS2 0666 0 0 c 4 66
nod /dev/ttyS3 0666 0 0 c 4 67
nod /dev/ttyS4 0666 0 0 c 4 68
nod /dev/ttyS5 0666 0 0 c 4 69
dir /bin 755 0 0
dir /proc 755 0 0
file /bin/hello ${INSTALL_ROOT}/projects/${SAMPLE}/hello/hello 755 0 0
slink /bin/init hello 777 0 0
I changed the last two lines of the initramfs to read as follows:
file /bin/hello ${INSTALL_ROOT}/projects/${SAMPLE}/hello/goodbye 755 0 0
slink /bin/init hello 777 0 0
Aber wenn ich versuche und die SmartFusion2 booten nach dem uImage remaking, erhalte ich diese, abgesprochen Fehler am Boden:
Starting kernel ...
Linux version 2.6.33-arm1 ([email protected]) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-189)) #38 Thu May 25 09:09:08 MDT 2017
CPU: ARMv7-M Processor [412fc231] revision 1 (ARMv7M)
CPU: NO data cache, 8K instruction cache
Machine: Microsemi M2S
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256
Kernel command line: m2s_platform=m2s-fg484-som console=ttyS0,115200 panic=10 ip=10.2.118.102:10.2.118.101:192.168.0.1::m2s-fg484-som:eth0:off ethaddr=3C:FB:96:05:00:53
PID hash table entries: 256 (order: -2, 1024 bytes)
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 64MB = 64MB total
Memory: 64408k/64408k available, 1128k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0x00000000 - 0x00001000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 (896 kB)
vmalloc : 0x00000000 - 0xffffffff (4095 MB)
lowmem : 0xa0000000 - 0xa4000000 ( 64 MB)
modules : 0xa0000000 - 0x01000000 (1552 MB)
.init : 0xa0008000 - 0xa0012000 ( 40 kB)
.text : 0xa0074bc0 - 0xa0083000 ( 58 kB)
.data : 0xa0084000 - 0xa008cce0 ( 36 kB)
Hierarchical RCU implementation.
NR_IRQS:83
Calibrating delay loop... 132.30 BogoMIPS (lpj=661504)
Mount-cache hash table entries: 512
Switching to clocksource mss_timer2
Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0x40000000 (irq = 10) is a 16550A
console [ttyS0] enabled
serial8250.1: ttyS1 at MMIO 0x40010000 (irq = 11) is a 16550A
Freeing init memory: 40K
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
Backtrace: no frame pointer
Rebooting in 10 seconds..
Kann mir jemand erklären, warum das passiert und was ich tun muss, damit initramfs beim Booten das richtige Programm ausführt? Vielen Dank!!