diff options
| author | wuyangyong <[email protected]> | 2012-02-16 15:58:52 +0000 |
|---|---|---|
| committer | wuyangyong <[email protected]> | 2012-02-16 15:58:52 +0000 |
| commit | be7bd6b5d7f0100cb75211568a21442ff79c2f3f (patch) | |
| tree | f30967b27f16d462a8a08b72e2cc06efd00cd16e | |
| parent | 4f6f15601dad6f72dca278afe2af1451cdae29c2 (diff) | |
update x86.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1950 bbd45198-f89e-11dd-88c7-29a3b14d5316
32 files changed, 1152 insertions, 792 deletions
diff --git a/bsp/x86/SConscript b/bsp/x86/SConscript new file mode 100644 index 0000000000..a425264923 --- /dev/null +++ b/bsp/x86/SConscript @@ -0,0 +1,14 @@ +# for module compiling
+import os
+Import('RTT_ROOT')
+
+cwd = str(Dir('#'))
+objs = []
+list = os.listdir(cwd)
+
+for d in list:
+ path = os.path.join(cwd, d)
+ if os.path.isfile(os.path.join(path, 'SConscript')):
+ objs = objs + SConscript(os.path.join(d, 'SConscript'))
+
+Return('objs')
diff --git a/bsp/x86/SConstruct b/bsp/x86/SConstruct new file mode 100644 index 0000000000..061f726069 --- /dev/null +++ b/bsp/x86/SConstruct @@ -0,0 +1,28 @@ +import os
+import sys
+import rtconfig
+
+RTT_ROOT = os.path.normpath(os.getcwd() + '/../..')
+sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
+from building import *
+
+TARGET = 'rtthread.' + rtconfig.TARGET_EXT
+
+env = Environment(tools = ['mingw'],
+ AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
+ CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS,
+ AR = rtconfig.AR, ARFLAGS = '-rc',
+ LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
+env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
+
+Export('RTT_ROOT')
+Export('rtconfig')
+
+# prepare building environment
+objs = PrepareBuilding(env, RTT_ROOT)
+
+# build program
+env.Program(TARGET, objs)
+
+# end building
+EndBuilding(TARGET)
diff --git a/bsp/x86/application.c b/bsp/x86/application.c deleted file mode 100644 index cad1e64d97..0000000000 --- a/bsp/x86/application.c +++ /dev/null @@ -1,28 +0,0 @@ -/* - * File : application.c - * This file is part of RT-Thread RTOS - * COPYRIGHT (C) 2006, RT-Thread Develop Team - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://openlab.rt-thread.com/license/LICENSE - * - * Change Logs: - * Date Author Notes - * 2006-09-15 QiuYi the first version - */ - -/** - * @addtogroup QEMU - */ -/*@{*/ - -/** - * This function will be invoked to initalize user application when system startup. - */ -int rt_application_init() -{ - return 0; /* empty */ -} - -/*@}*/ diff --git a/bsp/x86/applications/SConscript b/bsp/x86/applications/SConscript new file mode 100644 index 0000000000..591734409c --- /dev/null +++ b/bsp/x86/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT')
+Import('rtconfig')
+from building import *
+
+cwd = os.path.join(str(Dir('#')), 'applications')
+src = Glob('*.c')
+CPPPATH = [cwd, str(Dir('#'))]
+
+group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH)
+
+Return('group')
diff --git a/bsp/x86/applications/application.c b/bsp/x86/applications/application.c new file mode 100644 index 0000000000..48e17cbc1e --- /dev/null +++ b/bsp/x86/applications/application.c @@ -0,0 +1,95 @@ +/* + * File : application.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006, RT-Thread Develop Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://openlab.rt-thread.com/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2006-09-15 QiuYi the first version + */ + +/** + * @addtogroup QEMU + */ +/*@{*/ +
+#include <rtthread.h>
+
+ALIGN(RT_ALIGN_SIZE)
+static char thread_led1_stack[1024];
+struct rt_thread thread_led1;
+static void rt_thread_entry_led1(void* parameter)
+{
+ unsigned int count=0;
+ while (1)
+ {
+ /* led1 on */
+#ifndef RT_USING_FINSH
+ rt_kprintf("led1 on,count : %d\r\n",count);
+#endif
+ count++;
+ /* sleep 0.5 second and switch to other thread */
+ rt_thread_delay(RT_TICK_PER_SECOND/2);
+
+ /* led1 off */
+#ifndef RT_USING_FINSH
+ rt_kprintf("led1 off\r\n");
+#endif
+ rt_thread_delay(RT_TICK_PER_SECOND/2);
+ }
+}
+
+ALIGN(RT_ALIGN_SIZE)
+static char thread_led2_stack[1024];
+struct rt_thread thread_led2;
+void rt_thread_entry_led2(void* parameter)
+{
+ unsigned int count=0;
+ while (1)
+ {
+ /* led2 on */
+#ifndef RT_USING_FINSH
+ rt_kprintf("led2 on,count : %d\r\n",count);
+#endif
+ count++;
+ rt_thread_delay(RT_TICK_PER_SECOND);
+
+ /* led2 off */
+#ifndef RT_USING_FINSH
+ rt_kprintf("led2 off\r\n");
+#endif
+ rt_thread_delay(RT_TICK_PER_SECOND);
+ }
+}
+ +/** + * This function will be invoked to initalize user application when system startup. + */ +int rt_application_init() +{ + //------- init led1 thread
+ rt_thread_init(&thread_led1,
+ "led1",
+ rt_thread_entry_led1,
+ RT_NULL,
+ &thread_led1_stack[0],
+ sizeof(thread_led1_stack),11,5);
+ rt_thread_startup(&thread_led1);
+
+ //------- init led2 thread
+ rt_thread_init(&thread_led2,
+ "led2",
+ rt_thread_entry_led2,
+ RT_NULL,
+ &thread_led2_stack[0],
+ sizeof(thread_led2_stack),12,5);
+ rt_thread_startup(&thread_led2);
+
+ return 0; /* empty */ +} + +/*@}*/ diff --git a/bsp/x86/startup.c b/bsp/x86/applications/startup.c index 4841da83f1..1449b69de6 100644 --- a/bsp/x86/startup.c +++ b/bsp/x86/applications/startup.c @@ -18,12 +18,18 @@ #include "board.h" -extern void rt_console_init(void); -extern void rt_hw_interrupt_init(void); +extern void rt_hw_console_init(void); extern void rt_hw_board_init(void); -extern void rt_system_timer_init(void); -extern void rt_system_scheduler_init(void); -extern void rt_thread_idle_init(void); +extern int rt_application_init(void); +//extern void rt_hw_interrupt_init(void); +//extern void rt_system_timer_init(void); +//extern void rt_system_scheduler_init(void); +//extern void rt_thread_idle_init(void); +
+#ifdef RT_USING_FINSH
+extern void finsh_system_init(void);
+extern void finsh_set_device(const char* device);
+#endif
extern unsigned char __bss_start[]; extern unsigned char __bss_end[]; @@ -41,9 +47,6 @@ void rt_hw_clear_bss() while(dst < __bss_end) *dst++ = 0; } -extern void finsh_system_init(void); -extern int rt_application_init(void); - /** * This function will startup RT-Thread RTOS */ @@ -51,55 +54,56 @@ void rtthread_startup() { /* clear .bss */ rt_hw_clear_bss(); - + /* init hardware interrupt */ rt_hw_interrupt_init(); - + /* init the console */ - rt_console_init(); - + rt_hw_console_init();
+ rt_console_set_device("console"); + /* init board */ rt_hw_board_init(); - + rt_show_version(); - + /* init tick */ - rt_system_tick_init(); - + rt_system_tick_init();
+ /* init kernel object */ rt_system_object_init(); - + /* init timer system */ rt_system_timer_init(); - + /* init memory system */ -#ifdef RT_USING_HEAP - //rt_system_heap_init(); +#ifdef RT_USING_HEAP
+ rt_system_heap_init((void*)&__bss_end, (void*)(1024UL*1024*8)); /* RAM 16M */
#endif - + /* init scheduler system */ rt_system_scheduler_init(); - + /* init application */ rt_application_init(); - - /* init the finsh input */ - rt_hw_finsh_init(); - + +#ifdef RT_USING_FINSH /* init finsh */ finsh_system_init(); - + finsh_set_device("console");
+#endif
+ #ifdef RT_USING_HOOK /* set idle thread hook */ rt_thread_idle_sethook(RT_NULL); #endif - + /* init idle thread */ rt_thread_idle_init(); - + /* start scheduler */ rt_system_scheduler_start(); - + /* never reach here */ return ; diff --git a/bsp/x86/build/Makefile b/bsp/x86/build/Makefile deleted file mode 100644 index a5cc611799..0000000000 --- a/bsp/x86/build/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -KERNEL_ROOT=. - -include $(KERNEL_ROOT)/config.mk - -SRC_DIR = src libcpu -MAKE_CMD= - -ifeq ($(RT_USING_FINSH), 1) -SRC_DIR += finsh -MAKE_CMD+= RT_USING_FINSH=1 -endif - -ifeq ($(RT_USING_LWIP), 1) -SRC_DIR += net -MAKE_CMD+= RT_USING_LWIP=1 -endif - -ifeq ($(RT_USING_EFSL), 1) -SRC_DIR += filesystem -MAKE_CMD+= RT_USING_EFSL=1 -endif - -ifeq ($(RT_USING_RTGUI), 1) -SRC_DIR += rtgui -MAKE_CMD+= RT_USING_RTGUI=1 -endif - -ifeq ($(RT_USING_CPLUSPLUS), 1) -SRC_DIR += cplusplus -endif - -ifeq ($(RT_USING_NEWLIB), 1) -SRC_DIR += libc -else -ifeq ($(RT_USING_MINILIBC), 1) -SRC_DIR += libc -endif -endif - -SRC_DIR += bsp - -all: - for dir in $(SRC_DIR); do \ - make -C $$dir $(MAKE_CMD); \ - done - -clean : - for dir in $(SRC_DIR); do \ - make -C $$dir clean $(MAKE_CMD); \ - done - -test: - make -C testsuite - -docs: - $(DOXYGEN) Doxyfile - -dist-clean: clean - make -C testsuite clean diff --git a/bsp/x86/build/bsp/Makefile b/bsp/x86/build/bsp/Makefile deleted file mode 100644 index 20099682bc..0000000000 --- a/bsp/x86/build/bsp/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -KERNEL_ROOT=.. - -include $(KERNEL_ROOT)/config.mk - -all: - make -C $(BOARD) - -clean: - make -C $(BOARD) clean
\ No newline at end of file diff --git a/bsp/x86/build/bsp/qemu/Makefile b/bsp/x86/build/bsp/qemu/Makefile deleted file mode 100644 index 346c319157..0000000000 --- a/bsp/x86/build/bsp/qemu/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -KERNEL_ROOT=../.. - -include $(KERNEL_ROOT)/config.mk - -SRC = board.c startup.c keyboard.c console.c serial.c -APP = application.o -OBJ = $(SRC:.c=.o) -BIN = rtthread-$(BOARD) -IMG = $(KERNEL_ROOT)/lib/$(BIN).img - -#LFALGS = -nostdlib -Bstatic -T $(LDSCRIPT) -Ttext $(TEXTBASE) -LFALGS = -nostdlib -Bstatic -T $(LDSCRIPT) -CFLAGS += -I$(KERNEL_ROOT)/libcpu/$(ARCH)/include - -all: $(BIN) $(LIBBSP) - -$(IMG): $(BIN) $(KERNEL_ROOT)/lib/boot - dd if=/dev/zero of=$(IMG)~ count=1000 2>/dev/null - dd if=$(KERNEL_ROOT)/lib/boot of=$(IMG)~ conv=notrunc 2>/dev/null - dd if=$(BIN) of=$(IMG)~ seek=1 conv=notrunc 2>/dev/null - -$(LIBBSP): $(OBJ) - $(AR) r $@ $? - $(RANLIB) $@ - -$(BIN): $(OBJ) $(APP) $(LIBFINSH) $(LIBCPU) $(KERNEL) - $(LD) $(LFALGS) $(STARTOBJ) $(OBJ) $(APP) $(LIBFINSH) $(KERNEL) $(LIBCPU) -o $(BIN).elf - $(SIZE) $(BIN).elf - -clean : - $(RM) $(BIN).elf *.o *~ *.bak *.bin $(LIBBSP) - $(RM) .depend - -dep : .depend - -include .depend - -.depend: $(SRC) - $(CC) $(CFLAGS) -M $^ > $@ diff --git a/bsp/x86/build/clean-link b/bsp/x86/build/clean-link deleted file mode 100755 index 33d5058788..0000000000 --- a/bsp/x86/build/clean-link +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -rm lib -rf -rm include -f -rm src/*.c -f -rm src/*.h -f -rm src/*.o -f -rm bsp/qemu/*.c -f -rm bsp/qemu/*.h -f -rm bsp/qemu/*.S -f -rm bsp/qemu/*.o -f -rm bsp/qemu/*.lds -f -rm libcpu/ia32/*.c -f -rm libcpu/ia32/*.S -f -rm libcpu/ia32/*.o -f -rm libcpu/ia32/include -f -rm finsh/*.c -f -rm finsh/*.h -f -rm finsh/*.o -f diff --git a/bsp/x86/build/config.local b/bsp/x86/build/config.local deleted file mode 100644 index 74004109c1..0000000000 --- a/bsp/x86/build/config.local +++ /dev/null @@ -1,38 +0,0 @@ -# RT-Thread build config file -# Platform -PLATFORM=qemu - -# Platform Prefix -PREFIX= - -# C flags -CFLAGS=-Wall - -# Linker flags -LDFLAGS=-nostdlib - -# ASM Flags -ASFLAGS= - -# Build Type -BUILDTYPE=RAM - -# Release Type -RELEASETYPE=Release - -# Text Base -TEXTBASE=0x108000 - -# SECTION: RT-Thread Component -# finsh, shell of RT-Thread -RT_USING_FINSH=1 - -# a mini libc -#RT_USING_MINILIBC=1 - -# Using C++ support -# RT_USING_CPLUSPLUS=1 - -# LwIP, light weight TCP/IP stack for RT-Thread -# RT_USING_LWIP=1 - diff --git a/bsp/x86/build/config.mk b/bsp/x86/build/config.mk deleted file mode 100644 index 6a3adc5d93..0000000000 --- a/bsp/x86/build/config.mk +++ /dev/null @@ -1,140 +0,0 @@ -# -# RT-Thread Makefile -# CFLAGS for C compiler flags -# CPPFLAGS for C++ compiler flags -# LDFLAGS for ld link flags -# LDLIBS for libraries should be linked -# AFLAGS for assemble flags -# - -include $(KERNEL_ROOT)/config.local -include $(KERNEL_ROOT)/config.target - -# -# toolchain variables -# -CC = $(PREFIX)gcc -CXX = $(PREFIX)g++ -LD = $(PREFIX)ld -AR = $(PREFIX)ar -AS = $(PREFIX)as -RANLIB = $(PREFIX)ranlib -NM = $(PREFIX)nm -OBJCOPY = $(PREFIX)objcopy -OBJDUMP = $(PREFIX)objdump -STRIP = $(PREFIX)strip -SIZE = $(PREFIX)size -RM = rm -rf -MKDIR = mkdir -p - -# -# start object and library -# -STARTOBJ = $(KERNEL_ROOT)/lib/start_$(CPU).o -LIBCPU = $(KERNEL_ROOT)/lib/libcpu_$(CPU).a -KERNEL = $(KERNEL_ROOT)/lib/libkernel_$(ARCH).a -LIBBSP = $(KERNEL_ROOT)/lib/libbsp_$(BOARD).a -LIBFINSH = $(KERNEL_ROOT)/lib/libfinsh_$(ARCH).a -LIBEFSL = $(KERNEL_ROOT)/lib/libefsl-fs-vfat.a \ - $(KERNEL_ROOT)/lib/libefsl-base.a -LIBRTGUI = $(KERNEL_ROOT)/lib/librtgui_widgets.a \ - $(KERNEL_ROOT)/lib/librtgui_server.a \ - $(KERNEL_ROOT)/lib/librtgui_common.a \ - $(KERNEL_ROOT)/lib/librtgui_app.a -LIBLWIP = $(KERNEL_ROOT)/lib/liblwip_$(ARCH).a -LIBCPP = $(KERNEL_ROOT)/lib/librtt++_$(ARCH).a -LIBMINIC = $(KERNEL_ROOT)/lib/libminilibc_$(ARCH).a - -LDLIBS = -lcpu_$(CPU) -lkernel_$(ARCH) -lbsp_$(BOARD) - -# -# ld script, according to build type, RAM or ROM -# -ifeq ($(BUILDTYPE), RAM) -LDSCRIPT= $(KERNEL_ROOT)/bsp/$(BOARD)/$(BOARD)_ram.lds -else -LDSCRIPT= $(KERNEL_ROOT)/bsp/$(BOARD)/$(BOARD)_rom.lds -endif - -# -# RT-Thread component -# -ifeq ($(RT_USING_FINSH), 1) -CFLAGS += -I$(KERNEL_ROOT)/finsh -LDLIBS += -lfinsh_$(ARCH) -endif - -ifeq ($(RT_USING_RTGUI), 1) -CFLAGS += -I$(KERNEL_ROOT)/rtgui/include -LDLIBS += -lrtgui_server -lrtgui_common -lrtgui_widgets -lrtgui_app -endif - -ifeq ($(RT_USING_LWIP), 1) -CFLAGS += -I$(KERNEL_ROOT)/net/lwip/src \ - -I$(KERNEL_ROOT)/net/lwip/src/include \ - -I$(KERNEL_ROOT)/net/lwip/src/include/ipv4 \ - -I$(KERNEL_ROOT)/net/lwip/src/arch/include -LDLIBS += -llwip_$(ARCH) -endif - -ifeq ($(RT_USING_EFSL), 1) -CFLAGS += -I$(KERNEL_ROOT)/filesystem/efsl/src/fs/vfat/include \ - -I$(KERNEL_ROOT)/filesystem/efsl/src/base/include \ - -I$(KERNEL_ROOT)/filesystem/efsl/src/include \ - -I$(KERNEL_ROOT)/filesystem/efsl/conf -LDLIBS += -lefsl-base -lefsl-fs-vfat -endif - -ifeq ($(RT_USING_CPLUSPLUS), 1) -CFLAGS += -LDLIBS += -lrtt++_$(ARCH) -endif - -ifeq ($(RT_USING_NEWLIB), 1) -CFLAGS += -I$(KERNEL_ROOT)/newlib/libc/include -LDLIBS += -lnewlib_$(ARCH) -else -ifeq ($(RT_USING_MINILIBC), 1) -CFLAGS += -I$(KERNEL_ROOT)/libc/minilibc -LDLIBS += -lminilibc_$(ARCH) -endif -endif - -# -# compiler, assemble and ld link flag -# -CFLAGS += -I$(KERNEL_ROOT)/include -I$(KERNEL_ROOT)/bsp/$(BOARD) -Wall -nostdinc -fno-builtin - -ifeq ($(RELEASETYPE), DEBUG) -CFLAGS += -ggdb -AFLAGS += -ggdb -else -CFLAGS += -O2 -CFLAGS += -AFLAGS += -endif - -ifeq ($(BUILDTYPE), RAM) -#AFLAGS += -#AFLAGS += -x assembler-with-cpp -DTEXT_BASE=$(TEXTBASE) -#AFLAGS += -x assembler-with-cpp -else -#AFLAGS += -#AFLAGS += -x assembler-with-cpp -DTEXT_BASE=$(TEXTBASE) -D__FLASH_BUILD__ -endif - -LDFLAGS += -L$(KERNEL_ROOT)/lib --start-group $(LDLIBS) --end-group - -CPPFLAGS = $(CFLAGS) -fno-rtti - -# -# Common rules -# -.c.o: - $(CC) -c $(CFLAGS) -o $@ $< - -.cpp.o: - $(CXX) -c $(CPPFLAGS) -o $@ $< - -.S.o: - $(CC) -c $(AFLAGS) -o $@ $< diff --git a/bsp/x86/build/config.target b/bsp/x86/build/config.target deleted file mode 100644 index 872a4a9c1e..0000000000 --- a/bsp/x86/build/config.target +++ /dev/null @@ -1,59 +0,0 @@ -ifeq ($(PLATFORM), lumit4510) -ARCH = arm -CPU = s3c4510 -BOARD = lumit4510 -endif - -ifeq ($(PLATFORM), wh44b0) -ARCH = arm -CPU = s3c44b0 -BOARD = wh44b0 -endif - -ifeq ($(PLATFORM), s3ceb2410) -ARCH = arm -CPU = s3c2410 -BOARD = s3ceb2410 -endif - -ifeq ($(PLATFORM), sam7s) -ARCH = arm -CPU = AT91SAM7S -BOARD = sam7s -endif - -ifeq ($(PLATFORM), sam7x) -ARCH = arm -CPU = AT91SAM7X -BOARD = sam7x -endif - -ifeq ($(PLATFORM), zaurusc1k) -ARCH = arm -CPU = pxa270 -BOARD = zaurusc1k -endif - -ifeq ($(PLATFORM), qemu_akita) -ARCH = arm -CPU = pxa270 -BOARD = qemu_akita -endif - -ifeq ($(PLATFORM), nds) -ARCH = arm -CPU = nds -BOARD = nds -endif - -ifeq ($(PLATFORM), qemu) -ARCH = ia32 -CPU = ia32 -BOARD = qemu -endif - -ifeq ($(PLATFORM), at9200) -ARCH = arm -CPU = AT9200 -BOARD = AT9200 -endif diff --git a/bsp/x86/build/create-link b/bsp/x86/build/create-link deleted file mode 100755 index 6131198931..0000000000 --- a/bsp/x86/build/create-link +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -mkdir lib -ln -s ../../../include include - -for m_file in `ls ../../../src` -do - ln -s ../../../../src/$m_file src/$m_file -done - -for m_file in `ls ../` -do - ln -s ../../../$m_file bsp/qemu/$m_file -done -rm bsp/qemu/build -f - -for m_file in `ls ../../../libcpu/ia32` -do - ln -s ../../../../../libcpu/ia32/$m_file libcpu/ia32/$m_file -done - -for m_file in `ls ../../../finsh` -do - ln -s ../../../../finsh/$m_file finsh/$m_file -done diff --git a/bsp/x86/build/finsh/Makefile b/bsp/x86/build/finsh/Makefile deleted file mode 100644 index 5b56504fae..0000000000 --- a/bsp/x86/build/finsh/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -KERNEL_ROOT=.. - -include $(KERNEL_ROOT)/config.mk - -SRC = cmd.c shell.c symbol.c finsh_error.c finsh_node.c finsh_token.c \ - finsh_heap.c finsh_ops.c finsh_var.c finsh_compiler.c finsh_init.c\ - finsh_parser.c finsh_vm.c -OBJ = $(SRC:.c=.o) - -CFLAGS += -I. - - -all: $(LIBFINSH) - -$(LIBFINSH): $(OBJ) - $(AR) -r $@ $? - $(RANLIB) $@ - -clean : - $(RM) *.o *~ *.bak - $(RM) $(LIBFINSH) - $(RM) .depend - -dep : .depend - -include .depend - -.depend: $(SRC) - $(CC) $(CFLAGS) -M $^ > $@ diff --git a/bsp/x86/build/libcpu/Makefile b/bsp/x86/build/libcpu/Makefile deleted file mode 100644 index a3a541ce74..0000000000 --- a/bsp/x86/build/libcpu/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -KERNEL_ROOT=.. - -include $(KERNEL_ROOT)/config.mk - -all: - make -C $(ARCH) - -clean: - make -C $(ARCH) clean diff --git a/bsp/x86/build/libcpu/ia32/Makefile b/bsp/x86/build/libcpu/ia32/Makefile deleted file mode 100644 index 90becda7d5..0000000000 --- a/bsp/x86/build/libcpu/ia32/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -KERNEL_ROOT=../.. - -include $(KERNEL_ROOT)/config.mk - -SRC = interrupt.c trap.c stack.c backtrace.c showmem.c __udivsi3.c __umodsi3.c -CPU_OBJ = $(SRC:.c=.o) context.o trapisr.o hdisr.o - -#AFLAGS += -DTEXT_BASE=$(TEXTBASE) -I$(KERNEL_ROOT)/libcpu/$(ARCH)/include -AFLAGS += -I$(KERNEL_ROOT)/libcpu/$(ARCH)/include -CFLAGS += -I$(KERNEL_ROOT)/libcpu/$(ARCH)/include - -all: $(LIBCPU) $(STARTOBJ) - -$(STARTOBJ): start.S -# $(CC) $(AFLAGS) -c start.S -ggdb -o $(STARTOBJ) - $(CC) $(AFLAGS) -c start.S -o $(STARTOBJ) - -$(LIBCPU): $(CPU_OBJ) - $(AR) r $(LIBCPU) $? - $(RANLIB) $(LIBCPU) - -clean : - $(RM) *.o *~ *.bak - $(RM) $(LIBCPU) - $(RM) $(STARTOBJ) - $(RM) .depend - -dep : .depend - -include .depend - -.depend: $(SRC) - $(CC) $(CFLAGS) -M $^ > $@ diff --git a/bsp/x86/build/readme b/bsp/x86/build/readme deleted file mode 100644 index b42b885f2e..0000000000 --- a/bsp/x86/build/readme +++ /dev/null @@ -1,9 +0,0 @@ -./create-link -make -cp bsp/qemu/rtthread-qemu.elf $dest - - - -test OK ON: - Fedora 10 - Fedora 11 diff --git a/bsp/x86/build/src/Makefile b/bsp/x86/build/src/Makefile deleted file mode 100644 index ad51ea4608..0000000000 --- a/bsp/x86/build/src/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -KERNEL_ROOT=.. - -include $(KERNEL_ROOT)/config.mk - -SRC = kservice.c clock.c object.c ipc.c timer.c irq.c scheduler.c \ - thread.c idle.c mempool.c mem.c slab.c device.c -OBJ = $(SRC:.c=.o) - -all: $(KERNEL) - -$(KERNEL): $(OBJ) - $(AR) r $@ $? - $(RANLIB) $@ - -clean : - $(RM) *.o *~ *.bak - $(RM) $(KERNEL) - $(RM) .depend - -dep : .depend - -include .depend - -.depend: $(SRC) - $(CC) $(CFLAGS) -M $^ > $@ diff --git a/bsp/x86/console.c b/bsp/x86/console.c deleted file mode 100644 index 75418acd9d..0000000000 --- a/bsp/x86/console.c +++ /dev/null @@ -1,210 +0,0 @@ -/* - * File : console.c - * This file is part of RT-Thread RTOS - * COPYRIGHT (C) 2006, RT-Thread Development Team - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://openlab.rt-thread.com/license/LICENSE - * - * Change Logs: - * Date Author Notes - * 2006-09-15 QiuYi the first version - */ - -#include <rtthread.h> -#include <rthw.h> - -#include <bsp.h> - - -#include "serial.h" - -static unsigned addr_6845; -static rt_uint16_t *crt_buf; -static rt_int16_t crt_pos; - -extern void rt_serial_init(void); -extern char rt_keyboard_getc(void); - -static void rt_console_putc(int c); - -/** - * @addtogroup QEMU - */ -/*@{*/ - -/** - * This function initializes cga - * - */ -void rt_cga_init(void) -{ - rt_uint16_t volatile *cp; - rt_uint16_t was; - rt_uint32_t pos; - - cp = (rt_uint16_t *) (CGA_BUF); - was = *cp; - *cp = (rt_uint16_t) 0xA55A; - if (*cp != 0xA55A) - { - cp = (rt_uint16_t *) (MONO_BUF); - addr_6845 = MONO_BASE; - } - else - { - *cp = was; - addr_6845 = CGA_BASE; - } - - /* Extract cursor location */ - outb(addr_6845, 14); - pos = inb(addr_6845+1) << 8; - outb(addr_6845, 15); - pos |= inb(addr_6845+1); - - crt_buf = (rt_uint16_t *)cp; - crt_pos = pos; -} - -/** - * This function will write a character to cga - * - * @param c the char to write - */ -static void rt_cga_putc(int c) -{ - /* if no attribute given, then use black on white */ - if (!(c & ~0xff)) c |= 0x0700; - - switch (c & 0xff) - { - case '\b': - if (crt_pos > 0) - { - crt_pos--; - crt_buf[crt_pos] = (c&~0xff) | ' '; - } - break; - case '\n': - crt_pos += CRT_COLS; - /* cascade */ - case '\r': - crt_pos -= (crt_pos % CRT_COLS); - break; - case '\t': - rt_console_putc(' '); - rt_console_putc(' '); - rt_console_putc(' '); - rt_console_putc(' '); - rt_console_putc(' '); - break; - default: - crt_buf[crt_pos++] = c; /* write the character */ - break; - } - - if (crt_pos >= CRT_SIZE) - { - rt_int32_t i; - rt_memcpy(crt_buf, crt_buf + CRT_COLS, (CRT_SIZE - CRT_COLS) << 1); - for (i = CRT_SIZE - CRT_COLS; i < CRT_SIZE; i++) - crt_buf[i] = 0x0700 | ' '; - crt_pos -= CRT_COLS; - } - - outb(addr_6845, 14); - outb(addr_6845+1, crt_pos >> 8); - outb(addr_6845, 15); - outb(addr_6845+1, crt_pos); -} - -/** - * This function will write a character to serial an cga - * - * @param c the char to write - */ -static void rt_console_putc(int c) -{ - rt_cga_putc(c); - rt_serial_putc(c); -} - -/** - * This function initializes console - * - */ -void rt_console_init(void) -{ - rt_cga_init(); - rt_serial_init(); -} - -/** - * This function is used to display a string on console, normally, it's - * invoked by rt_kprintf - * - * @param str the displayed string - * - * Modified: - * caoxl 2009-10-14 - * the name is change to rt_hw_console_output in the v0.3.0 - * - */ - -//void rt_console_puts(const char* str) -void rt_hw_console_output(const char* str) -{ - while (*str) - { - rt_console_putc (*str++); - } -} - -#define BY2CONS 512 - -static struct -{ - rt_uint8_t buf[BY2CONS]; - rt_uint32_t rpos; - rt_uint32_t wpos; -}cons; - -static void rt_console_intr(char (*proc)(void)) -{ - int c; - - while ((c = (*proc)()) != -1) - { - if (c == 0) - continue; - cons.buf[cons.wpos++] = c; - if (cons.wpos == BY2CONS) - cons.wpos = 0; - } -} - -/** - * return the next input character from the console,either from serial, - * or keyboard - * - */ -int rt_console_getc(void) -{ - int c; - - rt_console_intr(rt_serial_getc); - rt_console_intr(rt_keyboard_getc); - - if (cons.rpos != cons.wpos) - { - c = cons.buf[cons.rpos++]; - if (cons.rpos == BY2CONS) - cons.rpos = 0; - return c; - } - return 0; -} - -/*@}*/ diff --git a/bsp/x86/drivers/SConscript b/bsp/x86/drivers/SConscript new file mode 100644 index 0000000000..370e4f9318 --- /dev/null +++ b/bsp/x86/drivers/SConscript @@ -0,0 +1,13 @@ +Import('RTT_ROOT')
+Import('rtconfig')
+from building import *
+
+cwd = os.path.join(str(Dir('#')), 'drivers')
+
+src = Glob('*.c')
+
+CPPPATH = [cwd, cwd + '/include']
+
+group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
+
+Return('group')
diff --git a/bsp/x86/board.c b/bsp/x86/drivers/board.c index c537b507be..3aff852b59 100644 --- a/bsp/x86/board.c +++ b/bsp/x86/drivers/board.c @@ -12,7 +12,7 @@ * 2006-09-15 QiuYi the first version * 2006-10-10 Bernard add hardware related of finsh */ - + #include <rtthread.h> #include <rthw.h> @@ -34,36 +34,31 @@ static void rt_timer_handler(int vector) */ void rt_hw_board_init(void) { - /* initialize 8253 clock to interrupt 100 times/sec */ + /* initialize 8253 clock to interrupt 1000 times/sec */ outb(TIMER_MODE, TIMER_SEL0|TIMER_RATEGEN|TIMER_16BIT); - outb(IO_TIMER1, TIMER_DIV(100) % 256); - outb(IO_TIMER1, TIMER_DIV(100) / 256); + outb(IO_TIMER1, TIMER_DIV(RT_TICK_PER_SECOND) % 256); + outb(IO_TIMER1, TIMER_DIV(RT_TICK_PER_SECOND) / 256); /* install interrupt handler */ rt_hw_interrupt_install(INTTIMER0, rt_timer_handler, RT_NULL); rt_hw_interrupt_umask(INTTIMER0); } - -#ifdef RT_USING_FINSH -extern void finsh_notify(void); -static void rt_serial_isr(int vector) -{ - finsh_notify(); -} - -/** - * This function will init hardware related in finsh shell - */ -void rt_hw_finsh_init() -{ - /* install UART isr */ - rt_hw_interrupt_install(INTUART0_RX, rt_serial_isr, RT_NULL); - rt_hw_interrupt_umask(INTUART0_RX); - - /* install keyboard isr */ - rt_hw_interrupt_install(INTKEYBOARD, rt_serial_isr, RT_NULL); - rt_hw_interrupt_umask(INTKEYBOARD); -} -#endif +
+void restart(void)
+{
+ outb(KBSTATP, 0xFE); /* pulse reset low */
+ while(1);
+}
+
+#ifdef RT_USING_FINSH
+#include <finsh.h>
+FINSH_FUNCTION_EXPORT(restart, reboot PC) +
+void reboot(void)
+{
+ restart();
+}
+FINSH_FUNCTION_EXPORT(reboot, reboot PC) +#endif
/*@}*/ diff --git a/bsp/x86/board.h b/bsp/x86/drivers/board.h index c7f4583157..4b04efdb5d 100644 --- a/bsp/x86/board.h +++ b/bsp/x86/drivers/board.h @@ -17,8 +17,4 @@ void rt_hw_board_init(void); -#ifdef RT_USING_FINSH -void rt_hw_finsh_init(void); -#endif - #endif
diff --git a/bsp/x86/drivers/console.c b/bsp/x86/drivers/console.c new file mode 100644 index 0000000000..d3ad91ec47 --- /dev/null +++ b/bsp/x86/drivers/console.c @@ -0,0 +1,378 @@ +/*
+ * File : console.c
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2006, RT-Thread Development Team
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://openlab.rt-thread.com/license/LICENSE
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2006-09-15 QiuYi the first version
+ */
+
+#include <rtthread.h>
+#include <rthw.h>
+
+#include <bsp.h>
+
+
+//#include "serial.h"
+
+static unsigned addr_6845;
+static rt_uint16_t *crt_buf;
+static rt_int16_t crt_pos;
+
+//extern void rt_serial_init(void);
+extern char rt_keyboard_getc(void);
+//extern char rt_serial_getc(void);
+
+static void rt_console_putc(int c);
+
+/**
+ * @addtogroup QEMU
+ */
+/*@{*/
+
+/**
+ * This function initializes cga
+ *
+ */
+void rt_cga_init(void)
+{
+ rt_uint16_t volatile *cp;
+ rt_uint16_t was;
+ rt_uint32_t pos;
+
+ cp = (rt_uint16_t *) (CGA_BUF);
+ was = *cp;
+ *cp = (rt_uint16_t) 0xA55A;
+ if (*cp != 0xA55A)
+ {
+ cp = (rt_uint16_t *) (MONO_BUF);
+ addr_6845 = MONO_BASE;
+ }
+ else
+ {
+ *cp = was;
+ addr_6845 = CGA_BASE;
+ }
+
+ /* Extract cursor location */
+ outb(addr_6845, 14);
+ pos = inb(addr_6845+1) << 8;
+ outb(addr_6845, 15);
+ pos |= inb(addr_6845+1);
+
+ crt_buf = (rt_uint16_t *)cp;
+ crt_pos = pos;
+}
+
+/**
+ * This function will write a character to cga
+ *
+ * @param c the char to write
+ */
+static void rt_cga_putc(int c)
+{
+ /* if no attribute given, then use black on white */
+ if (!(c & ~0xff)) c |= 0x0700;
+
+ switch (c & 0xff)
+ {
+ case '\b':
+ if (crt_pos > 0)
+ {
+ crt_pos--;
+ crt_buf[crt_pos] = (c&~0xff) | ' ';
+ }
+ break;
+ case '\n':
+ crt_pos += CRT_COLS;
+ /* cascade */
+ case '\r':
+ crt_pos -= (crt_pos % CRT_COLS);
+ break;
+ case '\t':
+ rt_console_putc(' ');
+ rt_console_putc(' ');
+ rt_console_putc(' ');
+ rt_console_putc(' ');
+ rt_console_putc(' ');
+ break;
+ default:
+ crt_buf[crt_pos++] = c; /* write the character */
+ break;
+ }
+
+ if (crt_pos >= CRT_SIZE)
+ {
+ rt_int32_t i;
+ rt_memcpy(crt_buf, crt_buf + CRT_COLS, (CRT_SIZE - CRT_COLS) << 1);
+ for (i = CRT_SIZE - CRT_COLS; i < CRT_SIZE; i++)
+ crt_buf[i] = 0x0700 | ' ';
+ crt_pos -= CRT_COLS;
+ }
+
+ outb(addr_6845, 14);
+ outb(addr_6845+1, crt_pos >> 8);
+ outb(addr_6845, 15);
+ outb(addr_6845+1, crt_pos);
+}
+
+/**
+ * This function will write a character to serial an cga
+ *
+ * @param c the char to write
+ */
+static void rt_console_putc(int c)
+{
+ rt_cga_putc(c);
+// rt_serial_putc(c);
+}
+
+/* RT-Thread Device Interface */
+#define CONSOLE_RX_BUFFER_SIZE 64
+static struct rt_device console_device;
+static rt_uint8_t rx_buffer[CONSOLE_RX_BUFFER_SIZE];
+static rt_uint32_t read_index, save_index;
+
+static rt_err_t rt_console_init (rt_device_t dev)
+{
+ return RT_EOK;
+}
+
+static rt_err_t rt_console_open(rt_device_t dev, rt_uint16_t oflag)
+{
+ return RT_EOK;
+}
+
+static rt_err_t rt_console_close(rt_device_t dev)
+{
+ return RT_EOK;
+}
+
+static rt_err_t rt_console_control(rt_device_t dev, rt_uint8_t cmd, void *args)
+{
+ return RT_EOK;
+}
+
+static rt_size_t rt_console_write(rt_device_t dev, rt_off_t pos, const void * buffer, rt_size_t size)
+{
+ rt_size_t i = size;
+ const char* str = buffer;
+
+ while(i--)
+ {
+ rt_console_putc(*str++);
+ }
+
+ return size;
+}
+
+static rt_size_t rt_console_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)
+{
+ rt_uint8_t* ptr = buffer;
+ rt_err_t err_code = RT_EOK;
+
+ /* interrupt mode Rx */
+ while (size)
+ {
+ rt_base_t level;
+
+ /* disable interrupt */
+ level = rt_hw_interrupt_disable();
+
+ if (read_index != save_index)
+ {
+ /* read a character */
+ *ptr++ = rx_buffer[read_index];
+ size--;
+
+ /* move to next position */
+ read_index ++;
+ if (read_index >= CONSOLE_RX_BUFFER_SIZE)
+ read_index = 0;
+ }
+ else
+ {
+ /* set error code */
+ err_code = -RT_EEMPTY;
+
+ /* enable interrupt */
+ rt_hw_interrupt_enable(level);
+ break;
+ }
+
+ /* enable interrupt */
+ rt_hw_interrupt_enable(level);
+ }
+
+ /* set error code */
+ rt_set_errno(err_code);
+ return (rt_uint32_t)ptr - (rt_uint32_t)buffer;
+}
+
+static void rt_console_isr(int vector)
+{
+// rt_kprintf("rt_console_isr\r\n");
+// RT_ASSERT(INTKEYBOARD == vector);
+// finsh_notify();
+
+ char c;
+ rt_base_t level;
+
+ while(1)
+ {
+ c = rt_keyboard_getc();
+// rt_kprintf(" %x", c);
+
+ if(c == 0)
+ {
+ break;
+ }
+ else if(c > 0)
+ {
+ /* disable interrupt */
+ level = rt_hw_interrupt_disable();
+
+ /* save character */
+ rx_buffer[save_index] = c;
+ save_index ++;
+ if (save_index >= CONSOLE_RX_BUFFER_SIZE)
+ save_index = 0;
+
+ /* if the next position is read index, discard this 'read char' */
+ if (save_index == read_index)
+ {
+ read_index ++;
+ if (read_index >= CONSOLE_RX_BUFFER_SIZE)
+ read_index = 0;
+ }
+
+ /* enable interrupt */
+ rt_hw_interrupt_enable(level);
+ }
+ }
+
+ /* invoke callback */
+ if (console_device.rx_indicate != RT_NULL)
+ {
+ rt_size_t rx_length;
+
+ /* get rx length */
+ rx_length = read_index > save_index ?
+ CONSOLE_RX_BUFFER_SIZE - read_index + save_index :
+ save_index - read_index;
+
+// rt_kprintf("\r\nrx_length %d\r\n", rx_length);
+ if(rx_length > 0)
+ {
+ console_device.rx_indicate(&console_device, rx_length);
+ }
+ }
+ else
+ {
+// rt_kprintf("\r\nconsole_device.rx_indicate == RT_NULL\r\n");
+ }
+}
+
+/**
+ * This function initializes console
+ *
+ */
+void rt_hw_console_init(void)
+{
+ rt_cga_init();
+// rt_serial_init();
+
+
+ /* install keyboard isr */
+ rt_hw_interrupt_install(INTKEYBOARD, rt_console_isr, RT_NULL);
+ rt_hw_interrupt_umask(INTKEYBOARD);
+
+ console_device.type = RT_Device_Class_Char;
+ console_device.rx_indicate = RT_NULL;
+ console_device.tx_complete = RT_NULL;
+ console_device.init = rt_console_init;
+ console_device.open = rt_console_open;
+ console_device.close = rt_console_close;
+ console_device.read = rt_console_read;
+ console_device.write = rt_console_write;
+ console_device.control = rt_console_control;
+ console_device.user_data = RT_NULL;
+
+ /* register a character device */
+ rt_device_register(&console_device,
+ "console",
+ RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM);
+}
+
+/**
+ * This function is used to display a string on console, normally, it's
+ * invoked by rt_kprintf
+ *
+ * @param str the displayed string
+ *
+ * Modified:
+ * caoxl 2009-10-14
+ * the name is change to rt_hw_console_output in the v0.3.0
+ *
+ */
+
+//void rt_console_puts(const char* str)
+void rt_hw_console_output(const char* str)
+{
+ while (*str)
+ {
+ rt_console_putc (*str++);
+ }
+}
+
+//#define BY2CONS 512
+//
+//static struct
+//{
+// rt_uint8_t buf[BY2CONS];
+// rt_uint32_t rpos;
+// rt_uint32_t wpos;
+//} cons;
+//
+//static void rt_console_intr(char (*proc)(void))
+//{
+// int c;
+//
+// while ((c = (*proc)()) != -1)
+// {
+// if (c == 0)
+// continue;
+// cons.buf[cons.wpos++] = c;
+// if (cons.wpos == BY2CONS)
+// cons.wpos = 0;
+// }
+//}
+
+///**
+// * return the next input character from the console,either from serial,
+// * or keyboard
+// *
+// */
+//int rt_console_getc(void)
+//{
+// int c;
+//
+// rt_console_intr(rt_serial_getc);
+// rt_console_intr(rt_keyboard_getc);
+//
+// if (cons.rpos != cons.wpos)
+// {
+// c = cons.buf[cons.rpos++];
+// if (cons.rpos == BY2CONS)
+// cons.rpos = 0;
+// return c;
+// }
+// return 0;
+//}
+
+/*@}*/
diff --git a/bsp/x86/drivers/include/bsp.h b/bsp/x86/drivers/include/bsp.h new file mode 100644 index 0000000000..e14e589274 --- /dev/null +++ b/bsp/x86/drivers/include/bsp.h @@ -0,0 +1,125 @@ +/* + * File : bsp.h + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006, RT-Thread Develop Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://openlab.rt-thread.com/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2006-09-15 QiuYi the first version */ + +#ifndef __BSP_H_ +#define __BSP_H_ + +#include <i386.h> + +/*******************************************************************/ +/* Timer Register */ +/*******************************************************************/ +#define TIMER_CNTR0 (IO_TIMER1 + 0) /* timer 0 counter port */ +#define TIMER_CNTR1 (IO_TIMER1 + 1) /* timer 1 counter port */ +#define TIMER_CNTR2 (IO_TIMER1 + 2) /* timer 2 counter port */ +#define TIMER_MODE (IO_TIMER1 + 3) /* timer mode port */ +#define TIMER_SEL0 0x00 /* select counter 0 */ +#define TIMER_SEL1 0x40 /* select counter 1 */ +#define TIMER_INTTC 0x00 /* mode 0, intr on terminal cnt */ +#define TIMER_ONESHOT 0x02 /* mode 1, one shot */ +#define TIMER_RATEGEN 0x04 /* mode 2, rate generator */ +#define TIMER_SQWAVE 0x06 /* mode 3, square wave */ +#define TIMER_SWSTROBE 0x08 /* mode 4, s/w triggered strobe */ +#define TIMER_HWSTROBE 0x0a /* mode 5, h/w triggered strobe */ +#define TIMER_LATCH 0x00 /* latch counter for reading */ +#define TIMER_LSB 0x10 /* r/w counter LSB */ +#define TIMER_MSB 0x20 /* r/w counter MSB */ +#define TIMER_16BIT 0x30 /* r/w counter 16 bits, LSB first */ +#define TIMER_BCD 0x01 /* count in BCD */ + +#define TIMER_FREQ 1193182 +#define TIMER_DIV(x) ((TIMER_FREQ+(x)/2)/(x)) + +#define IO_TIMER1 0x040 /* 8253 Timer #1 */ + +/*******************************************************************/ +/* Interrupt Controller */ +/*******************************************************************/ +/* these are processor defined */ +#define T_DIVIDE 0 /* divide error */ +#define T_DEBUG 1 /* debug exception */ +#define T_NMI 2 /* non-maskable interrupt */ +#define T_BRKPT 3 /* breakpoint */ +#define T_OFLOW 4 /* overflow */ +#define T_BOUND 5 /* bounds check */ +#define T_ILLOP 6 /* illegal opcode */ +#define T_DEVICE 7 /* device not available */ +#define T_DBLFLT 8 /* double fault */ +/* 9 is reserved */ +#define T_TSS 10 /* invalid task switch segment */ +#define T_SEGNP 11 /* segment not present */ +#define T_STACK 12 /* stack exception */ +#define T_GPFLT 13 /* genernal protection fault */ +#define T_PGFLT 14 /* page fault */ +/* 15 is reserved */ +#define T_FPERR 16 /* floating point error */ +#define T_ALIGN 17 /* aligment check */ +#define T_MCHK 18 /* machine check */ +#define T_DEFAULT 500 /* catchall */ + +#define INTTIMER0 0 +#define INTKEYBOARD 1 +#define INTUART0_RX 4 + +/* I/O Addresses of the two 8259A programmable interrupt controllers */ +#define IO_PIC1 0x20 /* Master(IRQs 0-7) */ +#define IO_PIC2 0xa0 /* Slave(IRQs 8-15) */ +#define IRQ_SLAVE 0x2 /* IRQ at which slave connects to master */ +#define IRQ_OFFSET 0x20 /* IRQ 0 corresponds to int IRQ_OFFSET */ + +#define MAX_HANDLERS 16 /*max number of isr handler*/ + +/*******************************************************************/ +/* CRT Register */ +/*******************************************************************/ +#define MONO_BASE 0x3b4 +#define MONO_BUF 0xb0000 +#define CGA_BASE 0x3d4 +#define CGA_BUF 0xb8000 + +#define CRT_ROWS 25 +#define CRT_COLS 80 +#define CRT_SIZE (CRT_ROWS * CRT_COLS) + +/*******************************************************************/ +/* Keyboard Register */ +/*******************************************************************/ +#define KBSTATP 0x64 /* kbd controller status port(I) */ +#define KBS_DIB 0x01 /* kbd data in buffer */ +#define KBDATAP 0x60 /* kbd data port(I) */ + +/*******************************************************************/ +/* Serial Register */ +/*******************************************************************/ +/*Serial I/O code */ +#define COM1 0x3F8 +#define COMSTATUS 5 +#define COMDATA 0x01 +#define COMREAD 0 +#define COMWRITE 0 + +/* Bits definition of the Line Status Register (LSR)*/ +#define DR 0x01 /* Data Ready */ +#define OE 0x02 /* Overrun Error */ +#define PE 0x04 /* Parity Error */ +#define FE 0x08 /* Framing Error */ +#define BI 0x10 /* Break Interrupt */ +#define THRE 0x20 /* Transmitter Holding Register Empty */ +#define TEMT 0x40 /* Transmitter Empty */ +#define ERFIFO 0x80 /* Error receive Fifo */ + +#ifdef __cplusplus +} +#endif + +#endif /* __BSP_H_ */ diff --git a/bsp/x86/drivers/include/grub.h b/bsp/x86/drivers/include/grub.h new file mode 100644 index 0000000000..18d08a78ad --- /dev/null +++ b/bsp/x86/drivers/include/grub.h @@ -0,0 +1,93 @@ +/*
+ * File : grub.h
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2006, RT-Thread Develop Team
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://openlab.rt-thread.com/license/LICENSE
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2006-10-09 Bernard the grub related definitions
+ * (multiboot)
+ */
+
+#ifndef __GRUB_H__
+#define __GRUB_H__
+
+/* the magic number for the multiboot header. */
+#define MULTIBOOT_HEADER_MAGIC 0x1BADB002
+
+/* the flags for the multiboot header. */
+#define MULTIBOOT_HEADER_FLAGS 0x00000003
+
+/* the magic number passed by a multiboot-compliant boot loader. */
+#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002
+
+#ifndef __ASM__
+/* the multiboot header. */
+typedef struct multiboot_header
+{
+ unsigned long magic;
+ unsigned long flags;
+ unsigned long checksum;
+ unsigned long header_addr;
+ unsigned long load_addr;
+ unsigned long load_end_addr;
+ unsigned long bss_end_addr;
+ unsigned long entry_addr;
+} multiboot_header_t;
+
+/* the section header table for elf. */
+typedef struct elf_section_header_table
+{
+ unsigned long num;
+ unsigned long size;
+ unsigned long addr;
+ unsigned long shndx;
+} elf_section_header_table_t;
+
+/* the multiboot information. */
+typedef struct multiboot_info
+{
+ unsigned long flags;
+ unsigned long mem_lower;
+ unsigned long mem_upper;
+ unsigned long boot_device;
+ unsigned long cmdline;
+ unsigned long mods_count;
+ unsigned long mods_addr;
+ union
+ {
+ aout_symbol_table_t aout_sym;
+ elf_section_header_table_t elf_sec;
+ } u;
+ unsigned long mmap_length;
+ unsigned long mmap_addr;
+} multiboot_info_t;
+
+/* the module structure. */
+typedef struct module
+{
+ unsigned long mod_start;
+ unsigned long mod_end;
+ unsigned long string;
+ unsigned long reserved;
+} module_t;
+
+/* the memory map. be careful that the offset 0 is base_addr_low
+ but no size. */
+typedef struct memory_map
+{
+ unsigned long size;
+ unsigned long base_addr_low;
+ unsigned long base_addr_high;
+ unsigned long length_low;
+ unsigned long length_high;
+ unsigned long type;
+} memory_map_t;
+
+#endif
+
+#endif
diff --git a/bsp/x86/drivers/include/i386.h b/bsp/x86/drivers/include/i386.h new file mode 100644 index 0000000000..4b5a0e7bd0 --- /dev/null +++ b/bsp/x86/drivers/include/i386.h @@ -0,0 +1,108 @@ +#ifndef __I386_H_ +#define __I386_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +static __inline unsigned char inb(int port) +{ + unsigned char data; + __asm __volatile("inb %w1,%0" : "=a" (data) : "d" (port)); + return data; +} + +static __inline unsigned short inw(int port) +{ + unsigned short data; + __asm __volatile("inw %w1,%0" : "=a" (data) : "d" (port)); + return data; +} + +static __inline unsigned int inl(int port) +{ + unsigned int data; + __asm __volatile("inl %w1,%0" : "=a" (data) : "d" (port)); + return data; +} + +static __inline void insl(int port, void *addr, int cnt) +{ + __asm __volatile("cld\n\trepne\n\tinsl" : + "=D" (addr), "=c" (cnt) : + "d" (port), "0" (addr), "1" (cnt) : + "memory", "cc"); +} + +static __inline void outb(int port, unsigned char data) +{ + __asm __volatile("outb %0,%w1" : : "a" (data), "d" (port)); +} + +static __inline void outw(int port, unsigned short data) +{ + __asm __volatile("outw %0,%w1" : : "a" (data), "d" (port)); +} + +/* Gate descriptors are slightly different*/ +struct Gatedesc { + unsigned gd_off_15_0 : 16; // low 16 bits of offset in segment + unsigned gd_ss : 16; // segment selector + unsigned gd_args : 5; // # args, 0 for interrupt/trap gates + unsigned gd_rsv1 : 3; // reserved(should be zero I guess) + unsigned gd_type :4; // type(STS_{TG,IG32,TG32}) + unsigned gd_s : 1; // must be 0 (system) + unsigned gd_dpl : 2; // descriptor(meaning new) privilege level + unsigned gd_p : 1; // Present + unsigned gd_off_31_16 : 16; // high bits of offset in segment +}; + +/* Pseudo-descriptors used for LGDT, LLDT and LIDT instructions*/ +struct Pseudodesc { + rt_uint16_t pd__garbage; // LGDT supposed to be from address 4N+2 + rt_uint16_t pd_lim; // Limit + rt_uint32_t pd_base __attribute__ ((packed)); // Base address +}; + +#define SETGATE(gate, istrap, sel, off, dpl) \ +{ \ + (gate).gd_off_15_0 = (rt_uint32_t) (off) & 0xffff; \ + (gate).gd_ss = (sel); \ + (gate).gd_args = 0; \ + (gate).gd_rsv1 = 0; \ + (gate).gd_type = (istrap) ? STS_TG32 : STS_IG32; \ + (gate).gd_s = 0; \ + (gate).gd_dpl = dpl; \ + (gate).gd_p = 1; \ + (gate).gd_off_31_16 = (rt_uint32_t) (off) >> 16; \ +} + +/* Global descriptor numbers*/ +#define GD_KT 0x08 // kernel text +#define GD_KD 0x10 // kernel data +#define GD_UT 0x18 // user text +#define GD_UD 0x20 // user data + +/* Application segment type bits*/ +#define STA_X 0x8 // Executable segment +#define STA_E 0x4 // Expand down(non-executable segments) +#define STA_C 0x4 // Conforming code segment(executable only) +#define STA_W 0x2 // Writeable(non-executable segments) +#define STA_R 0x2 // Readable(executable segments) +#define STA_A 0x1 // Accessed + +/* System segment type bits*/ +#define STS_T16A 0x1 // Available 16-bit TSS +#define STS_LDT 0x2 // Local Descriptor Table +#define STS_T16B 0x3 // Busy 16-bit TSS +#define STS_CG16 0x4 // 16-bit Call Gate +#define STS_TG 0x5 // Task Gate / Coum Transmitions +#define STS_IG16 0x6 // 16-bit Interrupt Gate +#define STS_TG16 0x7 // 16-bit Trap Gate +#define STS_T32A 0x9 // Available 32-bit TSS +#define STS_T32B 0xb // Busy 32-bit TSS +#define STS_CG32 0xc // 32-bit Call Gate +#define STS_IG32 0xe // 32-bit Interrupt Gate +#define STS_TG32 0xf // 32-bit Trap Gate + +#endif diff --git a/bsp/x86/keyboard.c b/bsp/x86/drivers/keyboard.c index 5bf3de3906..5bf3de3906 100644 --- a/bsp/x86/keyboard.c +++ b/bsp/x86/drivers/keyboard.c diff --git a/bsp/x86/serial.c b/bsp/x86/drivers/serial.c index f2484417e2..f2484417e2 100644 --- a/bsp/x86/serial.c +++ b/bsp/x86/drivers/serial.c diff --git a/bsp/x86/rtconfig.h b/bsp/x86/rtconfig.h new file mode 100644 index 0000000000..29cd287b73 --- /dev/null +++ b/bsp/x86/rtconfig.h @@ -0,0 +1,177 @@ +/* RT-Thread config file */
+#ifndef __RTTHREAD_CFG_H__
+#define __RTTHREAD_CFG_H__
+
+#define RT_USING_NEWLIB
+//#define RT_USING_PTHREADS
+#define RT_USING_DFS_DEVFS
+
+/* RT_NAME_MAX*/
+#define RT_NAME_MAX 8
+
+/* RT_ALIGN_SIZE*/
+#define RT_ALIGN_SIZE 8
+
+/* PRIORITY_MAX */
+#define RT_THREAD_PRIORITY_MAX 32
+
+/* Tick per Second */
+#define RT_TICK_PER_SECOND 1000
+
+/* SECTION: RT_DEBUG */
+/* Thread Debug */
+#define RT_DEBUG
+#define RT_THREAD_DEBUG
+
+#define RT_USING_OVERFLOW_CHECK
+
+/* Using Hook */
+#define RT_USING_HOOK
+
+/* Using Software Timer */
+/* #define RT_USING_TIMER_SOFT */
+#define RT_TIMER_THREAD_PRIO 4
+#define RT_TIMER_THREAD_STACK_SIZE 512
+#define RT_TIMER_TICK_PER_SECOND 10
+
+/* SECTION: IPC */
+/* Using Semaphore*/
+#define RT_USING_SEMAPHORE
+
+/* Using Mutex */
+#define RT_USING_MUTEX
+
+/* Using Event */
+#define RT_USING_EVENT
+
+/* Using MailBox */
+#define RT_USING_MAILBOX
+
+/* Using Message Queue */
+#define RT_USING_MESSAGEQUEUE
+
+/* SECTION: Memory Management */
+/* Using Memory Pool Management*/
+#define RT_USING_MEMPOOL
+
+/* Using Dynamic Heap Management */
+#define RT_USING_HEAP
+
+/* Using Small MM */
+#define RT_USING_SMALL_MEM
+
+/* SECTION: Device System */
+/* Using Device System */
+#define RT_USING_DEVICE
+
+/* SECTION: Console options */
+#define RT_USING_CONSOLE
+/* the buffer size of console*/
+#define RT_CONSOLEBUF_SIZE 128
+
+#define IDLE_THREAD_STACK_SIZE 1024 /* idle stack 1K */
+
+/* SECTION: finsh, a C-Express shell */
+#define RT_USING_FINSH
+/* Using symbol table */
+#define FINSH_USING_SYMTAB
+#define FINSH_USING_DESCRIPTION
+
+/* SECTION: device filesystem */
+ #define RT_USING_DFS
+
+#define RT_USING_DFS_ELMFAT
+#define RT_DFS_ELM_WORD_ACCESS
+/* Reentrancy (thread safe) of the FatFs module. */
+#define RT_DFS_ELM_REENTRANT
+/* Number of volumes (logical drives) to be used. */
+#define RT_DFS_ELM_DRIVES 2
+/* #define RT_DFS_ELM_USE_LFN 1 */
+#define RT_DFS_ELM_MAX_LFN 255
+/* Maximum sector size to be handled. */
+#define RT_DFS_ELM_MAX_SECTOR_SIZE 512
+
+/* the max number of mounted filesystem */
+#define DFS_FILESYSTEMS_MAX 2
+/* the max number of opened files */
+#define DFS_FD_MAX 4
+
+/* SECTION: lwip, a lighwight TCP/IP protocol stack */
+//#define RT_USING_LWIP
+/* LwIP uses RT-Thread Memory Management */
+#define RT_LWIP_USING_RT_MEM
+/* Enable ICMP protocol*/
+#define RT_LWIP_ICMP
+/* Enable UDP protocol*/
+#define RT_LWIP_UDP
+/* Enable TCP protocol*/
+#define RT_LWIP_TCP
+/* Enable DNS */
+#define RT_LWIP_DNS
+
+/* the number of simulatenously active TCP connections*/
+#define RT_LWIP_TCP_PCB_NUM 5
+
+/* Using DHCP */
+/* #define RT_LWIP_DHCP */
+
+/* ip address of target*/
+#define RT_LWIP_IPADDR0 192
+#define RT_LWIP_IPADDR1 168
+#define RT_LWIP_IPADDR2 1
+#define RT_LWIP_IPADDR3 30
+
+/* gateway address of target*/
+#define RT_LWIP_GWADDR0 192
+#define RT_LWIP_GWADDR1 168
+#define RT_LWIP_GWADDR2 1
+#define RT_LWIP_GWADDR3 1
+
+/* mask address of target*/
+#define RT_LWIP_MSKADDR0 255
+#define RT_LWIP_MSKADDR1 255
+#define RT_LWIP_MSKADDR2 255
+#define RT_LWIP_MSKADDR3 0
+
+/* tcp thread options */
+#define RT_LWIP_TCPTHREAD_PRIORITY 12
+#define RT_LWIP_TCPTHREAD_MBOX_SIZE 10
+#define RT_LWIP_TCPTHREAD_STACKSIZE 1024
+
+/* ethernet if thread options */
+#define RT_LWIP_ETHTHREAD_PRIORITY 15
+#define RT_LWIP_ETHTHREAD_MBOX_SIZE 10
+#define RT_LWIP_ETHTHREAD_STACKSIZE 512
+
+/* TCP sender buffer space */
+#define RT_LWIP_TCP_SND_BUF 8192
+/* TCP receive window. */
+#define RT_LWIP_TCP_WND 8192
+
+/* SECTION: RT-Thread/GUI */
+/* #define RT_USING_RTGUI */
+
+/* name length of RTGUI object */
+#define RTGUI_NAME_MAX 12
+/* support 16 weight font */
+#define RTGUI_USING_FONT16
+/* support Chinese font */
+#define RTGUI_USING_FONTHZ
+/* use DFS as file interface */
+#define RTGUI_USING_DFS_FILERW
+/* use font file as Chinese font */
+#define RTGUI_USING_HZ_FILE
+/* use Chinese bitmap font */
+#define RTGUI_USING_HZ_BMP
+/* use small size in RTGUI */
+#define RTGUI_USING_SMALL_SIZE
+/* use mouse cursor */
+/* #define RTGUI_USING_MOUSE_CURSOR */
+/* default font size in RTGUI */
+#define RTGUI_DEFAULT_FONT_SIZE 16
+
+/* image support */
+/* #define RTGUI_IMAGE_XPM */
+/* #define RTGUI_IMAGE_BMP */
+
+#endif
diff --git a/bsp/x86/rtconfig.py b/bsp/x86/rtconfig.py new file mode 100644 index 0000000000..19452a16a1 --- /dev/null +++ b/bsp/x86/rtconfig.py @@ -0,0 +1,41 @@ +# toolchains options
+ARCH='ia32'
+CPU=''
+CROSS_TOOL='gcc'
+
+# cross_tool provides the cross compiler
+# EXEC_PATH is the compiler execute path, for example, CodeSourcery,
+
+if CROSS_TOOL == 'gcc':
+ PLATFORM = 'gcc'
+ EXEC_PATH = 'E:/Program Files/CodeSourcery/Sourcery_CodeBench_Lite_for_IA32_ELF/bin'
+
+BUILD = 'debug'
+
+if PLATFORM == 'gcc':
+ # toolchains
+ PREFIX = 'i686-elf-'
+ CC = PREFIX + 'gcc'
+ AS = PREFIX + 'gcc'
+ AR = PREFIX + 'ar'
+ LINK = PREFIX + 'gcc'
+ TARGET_EXT = 'elf'
+ SIZE = PREFIX + 'size'
+ OBJDUMP = PREFIX + 'objdump'
+ OBJCPY = PREFIX + 'objcopy'
+
+ DEVICE = ' -mtune=generic'
+ CFLAGS = DEVICE + ' -Wall'
+ AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
+ LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-ia32.map,-cref,-u,_start -T x86_ram.lds'
+
+ CPATH = ''
+ LPATH = ''
+
+ if BUILD == 'debug':
+ CFLAGS += ' -O0 -gdwarf-2'
+ AFLAGS += ' -gdwarf-2'
+ else:
+ CFLAGS += ' -O2'
+
+ POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
diff --git a/bsp/x86/qemu_ram.lds b/bsp/x86/x86_ram.lds index 8964405875..27fe392708 100644 --- a/bsp/x86/qemu_ram.lds +++ b/bsp/x86/x86_ram.lds @@ -8,9 +8,20 @@ SECTIONS . = ALIGN(4); .text : { - *(.init) - *(.text) - } + *(.init) + *(.text) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + . = ALIGN(4); + } . = ALIGN(4); .rodata : { *(.rodata) } |
