2017-05-30 9 views
1

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!!

Antwort

2

Wie sich herausstellte, war ich verwirrt darüber, wie diese beiden Zeilen funktionierten. Als ich es endlich herausgefunden, sahen sie wie folgt aus:

file /bin/hello ${INSTALL_ROOT}/projects/${SAMPLE}/goodbye/hello 755 0 0 
slink /bin/init hello 777 0 0 

dann es wie gewünscht funktioniert, und ich konnte es in andere uImages implementieren.

Verwandte Themen