From b03d9581807d1faa071dececc4dcb0ac2102fadf Mon Sep 17 00:00:00 2001 From: Silvino Silva Date: Fri, 15 Sep 2017 02:29:30 +0100 Subject: dev c language system dev revision --- dev/c/index.html | 87 +------------------------------------------------------- 1 file changed, 1 insertion(+), 86 deletions(-) (limited to 'dev/c/index.html') diff --git a/dev/c/index.html b/dev/c/index.html index 684c7d2..1c3b478 100644 --- a/dev/c/index.html +++ b/dev/c/index.html @@ -7,92 +7,6 @@ Development Index -

System Development

- -

System development requires debug kernel know how, - in this example will be used qemu and gdb. A simple init - program is created. Create init.S;

- -
-	.global _start
-	_start:
-	    mov $1, %rax
-	    mov $1, %rdi
-	    mov $message, %rsi
-	    mov $message_len, %rdx
-	    syscall
-	    jmp .
-	    message: .ascii "FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR\n"
-	    .equ message_len, . - message
-	
- -

Assemble, link and create simple initial ram disk;

- -
-	mkdir d
-	as --64 -o init.o init.S # assemble
-	ld -o d/init init.o      # link
-	cd d
-	find . | cpio -o -H newc | gzip > ../rootfs.cpio.gz
-	
- -

Clean temporary directory;

- -
-	cd ..
-	rm -r d/
-	
- -

Can be used C to create init program;

- -
-	#include <stdio.h>
-	#include <unistd.h>
-
-	int main() {
-	    printf("FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR\n");
-	    sleep(0xFFFFFFFF);
-	    return 0;
-	}
-	
- -
-	$ gcc -static init.c -o init
-	
- -

Test qemu, kernel and simple init program, you should see - "FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR";

- -
-	$ qemu-system-x86_64 -enable-kvm --kernel arch/x86_64/boot/bzImage \
-    	--initrd rootfs.cpio.gz
-	
- -

If everything goes well you can start qemu without start CPU at - startup (-S) and with gdb server on TCP port 1234 (-s).

- -
-	$ qemu-system-x86_64 -enable-kvm --kernel arch/x86/boot/bzImage \
-                --initrd rootfs.cpio.gz \
-		-S -s
-	
- -

On another terminal start gdb;

- -
-	gdb \
-	    -ex "add-auto-load-safe-path $(pwd)" \
-	    -ex "file vmlinux" \
-	    -ex 'set arch i386:x86-64:intel' \
-	    -ex 'target remote localhost:1234' \
-	    -ex 'break start_kernel' \
-	    -ex 'continue' \
-	    -ex 'disconnect' \
-	    -ex 'set arch i386:x86-64' \
-	    -ex 'target remote localhost:1234'
-	
- -

C & GDB

C program with autotools @@ -172,6 +86,7 @@

         strace -c ./program
         
+ Development Index

This is part of the c9-doc Manual. -- cgit 1.4.1-2-gfad0