summaryrefslogtreecommitdiff
path: root/bsp
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2017-08-21 09:30:17 +0800
committerGitHub <[email protected]>2017-08-21 09:30:17 +0800
commit1f45d8c723cf8fd91a2f0ac6fec5ac9789c4cf66 (patch)
treec4d4d60ef82f5380fd60b86599e405e31fdd6676 /bsp
parent76a79f20d999bf6b2d77883967e19dad8ffc0604 (diff)
parent2957cf6f52f54fe06325d0595b3f535477cf2262 (diff)
Merge pull request #822 from parai/upstream
x86: bring up share object module on i386 machine
Diffstat (limited to 'bsp')
-rw-r--r--bsp/x86/Makefile44
-rw-r--r--bsp/x86/applications/application.c9
-rw-r--r--bsp/x86/drivers/console.c4
-rw-r--r--bsp/x86/rtconfig.h7
-rw-r--r--bsp/x86/rtconfig.py2
-rwxr-xr-xbsp/x86/src/extract.sh28
-rw-r--r--bsp/x86/src/hello.c36
-rw-r--r--bsp/x86/src/stdio.h18
-rw-r--r--bsp/x86/x86_ram.lds5
9 files changed, 140 insertions, 13 deletions
diff --git a/bsp/x86/Makefile b/bsp/x86/Makefile
index 1befec1368..cdb4f4ca8c 100644
--- a/bsp/x86/Makefile
+++ b/bsp/x86/Makefile
@@ -1,17 +1,45 @@
-all:floppy.img
- scons
- mkdir -p tmp
- sudo mount -t vfat floppy.img tmp -o loop
- sudo cp rtthread.elf tmp/boot/oskernel
- sudo umount tmp
+CC = gcc -O0 -m32 -fno-builtin -fno-stack-protector -nostdinc -nostdlib
+LD = ld -melf_i386 -nostdlib
+
+all: rtthread rtsym exe dll floppy.img
+ @mkdir -p tmp
+ @sudo mount -t vfat floppy.img tmp -o loop
+ @sudo cp -fv rtthread.elf tmp/boot/oskernel
+ @sudo rm tmp/bin/* -fr
+ @sudo cp out/* tmp/bin/ -fv
+ @sudo umount tmp
+
+rtthread:
+ @scons
+
+rtsym:
+ @./src/extract.sh ./rtthread-ia32.map ./src/rt_thread_sym.h
+
+obj:
+ mkdir -p obj
+
+out:
+ mkdir -p out
+
+dll: obj out
+ $(CC) -shared -s -fPIC -e main -Isrc src/hello.c -o out/hello.mo
+
+disasm: obj out
+ $(CC) -shared -S -fPIC -Isrc src/hello.c -o obj/hello.s
+ cat obj/hello.s
+ objdump --disassemble out/hello.mo
+
+exe: obj out
+
clean:
scons -c clean
- rm -fr build rtthread*
+ rm -fr build rtthread* out obj
floppy.img:
wget https://github.com/bajdcc/tinix/raw/master/floppy.img
+# https://en.wikibooks.org/wiki/QEMU/Devices/Network
run:
- qemu-system-i386 -fda floppy.img -boot a -m 64M -serial stdio
+ qemu-system-i386 -fda floppy.img -boot a -m 64M -serial stdio -net nic,model=ne2k_pci
diff --git a/bsp/x86/applications/application.c b/bsp/x86/applications/application.c
index 3a2f6c9b82..38f974def1 100644
--- a/bsp/x86/applications/application.c
+++ b/bsp/x86/applications/application.c
@@ -26,7 +26,12 @@
#ifdef RT_USING_DFS
#include <dfs_fs.h>
+#include <dfs_init.h>
#include "floppy.h"
+#ifdef RT_USING_MODULE
+#include <rtm.h>
+#endif
+extern int elm_init(void);
#endif
/* components initialization for simulator */
@@ -41,6 +46,10 @@ void components_init(void)
/* initialize the elm chan FatFS file system*/
elm_init();
#endif
+
+#ifdef RT_USING_MODULE
+ rt_system_module_init();
+#endif
#endif
}
void rt_init_thread_entry(void *parameter)
diff --git a/bsp/x86/drivers/console.c b/bsp/x86/drivers/console.c
index 6ffe9a7994..1c1eb05e02 100644
--- a/bsp/x86/drivers/console.c
+++ b/bsp/x86/drivers/console.c
@@ -29,7 +29,7 @@ extern void rt_serial_init(void);
extern char rt_serial_getc(void);
extern void rt_serial_putc(const char c);
-static void rt_console_putc(int c);
+void rt_console_putc(int c);
/**
* @addtogroup QEMU
@@ -127,7 +127,7 @@ static void rt_cga_putc(int c)
*
* @param c the char to write
*/
-static void rt_console_putc(int c)
+void rt_console_putc(int c)
{
rt_cga_putc(c);
rt_serial_putc(c);
diff --git a/bsp/x86/rtconfig.h b/bsp/x86/rtconfig.h
index 47c996cc46..780a1abc94 100644
--- a/bsp/x86/rtconfig.h
+++ b/bsp/x86/rtconfig.h
@@ -17,7 +17,7 @@
/* SECTION: RT_DEBUG */
/* Thread Debug */
#define RT_DEBUG
-#define RT_THREAD_DEBUG
+#define RT_DEBUG_MODULE 0
#define RT_USING_OVERFLOW_CHECK
@@ -69,6 +69,8 @@
/* SECTION: finsh, a C-Express shell */
#define RT_USING_FINSH
+#define FINSH_USING_MSH
+#define FINSH_USING_MSH_ONLY
/* Using symbol table */
#define FINSH_USING_SYMTAB
#define FINSH_USING_DESCRIPTION
@@ -175,4 +177,7 @@
/* #define RTGUI_IMAGE_XPM */
/* #define RTGUI_IMAGE_BMP */
+#define RT_USING_LIBDL
+#define RT_USING_MODULE
+#define MODULE_USING_386
#endif
diff --git a/bsp/x86/rtconfig.py b/bsp/x86/rtconfig.py
index e99ddfe324..c602315d06 100644
--- a/bsp/x86/rtconfig.py
+++ b/bsp/x86/rtconfig.py
@@ -33,7 +33,7 @@ BUILD = 'debug'
if PLATFORM == 'gcc':
# toolchains
PREFIX = ''
- CC = PREFIX + 'gcc -m32 -fno-builtin -fno-stack-protector'
+ CC = PREFIX + 'gcc -m32 -fno-builtin -fno-stack-protector -nostdinc'
AS = PREFIX + 'gcc -m32'
AR = PREFIX + 'ar'
LINK = PREFIX + 'ld -melf_i386'
diff --git a/bsp/x86/src/extract.sh b/bsp/x86/src/extract.sh
new file mode 100755
index 0000000000..89f8baef7a
--- /dev/null
+++ b/bsp/x86/src/extract.sh
@@ -0,0 +1,28 @@
+#! /bin/sh
+
+
+imap=$1
+iout=$2
+
+echo "!!! extract symbol from $imap to $iout !!!"
+
+symlist="rt_kprintf \
+rt_kputs \
+rt_vsprintf \
+rt_sprintf \
+rt_snprintf \
+rt_thread_create \
+"
+
+echo "#ifndef RT_THREAD_SYM_H_H" > $iout
+echo "#define RT_THREAD_SYM_H_H" >> $iout
+
+for sym in $symlist
+do
+dlim=`echo $sym | cut -b 1`
+addr=`cat $imap | grep $sym | head -n 1 | cut -d $dlim -f 1`
+
+echo "#define __abs_$sym $addr" >> $iout
+done
+
+echo "#endif /* RT_THREAD_SYM_H_H */" >> $iout
diff --git a/bsp/x86/src/hello.c b/bsp/x86/src/hello.c
new file mode 100644
index 0000000000..a075f18ef1
--- /dev/null
+++ b/bsp/x86/src/hello.c
@@ -0,0 +1,36 @@
+
+#include <stdio.h>
+const char* g_str = "Hello World!";
+
+static int a = 1234;
+int b = 5678;
+
+extern void rt_kprintf(const char* fmt,...);
+
+int add(int a, int b)
+{
+ return a+b;
+}
+
+int main(int argc, char* argv[])
+{
+ int i;
+ char str[32] = "Hello World\n";
+
+ for(i=0; i<argc; i++)
+ {
+ printf("argv[%d]='%s'\n", i, argv[i]);
+ }
+
+ printf(str);
+
+ printf("g_str address is %ph\n",g_str);
+ puts(g_str);
+
+ rt_kprintf("\nnative rt_kprintf a(%ph)=%d, b(%ph)=%d\n", &a, a, &b, b);
+
+ printf("%d+%d=%d\n", 4, 5, add(4, 5));
+
+ return 0xdeadbeef;
+}
+
diff --git a/bsp/x86/src/stdio.h b/bsp/x86/src/stdio.h
new file mode 100644
index 0000000000..152a29e38d
--- /dev/null
+++ b/bsp/x86/src/stdio.h
@@ -0,0 +1,18 @@
+#ifndef __STDIO_H_H
+#define __STDIO_H_H
+
+#include <rt_thread_sym.h>
+
+typedef unsigned int size_t;
+
+typedef int (*sprintf_fcn_t)(char *buf ,const char *format, ...);
+typedef int (*snprintf_fcn_t)(char *buf, size_t size, const char *format, ...);
+typedef void (*puts_fcn_t)(const char *str);
+typedef void (*printf_fcn_t)(const char *fmt, ...);
+
+#define printf ((printf_fcn_t)__abs_rt_kprintf)
+#define puts ((printf_fcn_t)__abs_rt_kputs)
+#define sprintf ((printf_fcn_t)__abs_rt_sprintf)
+#define snprintf ((printf_fcn_t)__abs_rt_snprintf)
+
+#endif
diff --git a/bsp/x86/x86_ram.lds b/bsp/x86/x86_ram.lds
index 27fe392708..afac69f04b 100644
--- a/bsp/x86/x86_ram.lds
+++ b/bsp/x86/x86_ram.lds
@@ -21,10 +21,13 @@ SECTIONS
KEEP(*(VSymTab))
__vsymtab_end = .;
. = ALIGN(4);
+ __rtmsymtab_start = .;
+ KEEP(*(RTMSymTab));
+ __rtmsymtab_end = .;
}
. = ALIGN(4);
- .rodata : { *(.rodata) }
+ .rodata : { *(.rodata*) }
. = ALIGN(4);
.data : { *(.data) }