mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-03-27 01:10:20 +08:00
sync branch rt-smart. (#6641)
* Synchronize the code of the rt mart branch to the master branch.
* TTY device
* Add lwP code from rt-smart
* Add vnode in DFS, but DFS will be re-write for rt-smart
* There are three libcpu for rt-smart:
* arm/cortex-a, arm/aarch64
* riscv64
Co-authored-by: Rbb666 <zhangbingru@rt-thread.com>
Co-authored-by: zhkag <zhkag@foxmail.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -21,27 +21,28 @@ int mnt_init(void)
|
||||
{
|
||||
rt_thread_delay(RT_TICK_PER_SECOND);
|
||||
|
||||
if (dfs_mount("sd0", "/", "elm", 0, 0) == 0)
|
||||
if (dfs_mount("sd", "/", "elm", 0, 0) == 0)
|
||||
{
|
||||
LOG_I("file system initialization done!\n");
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_W("[sd0] File System on SD ('sd0') initialization failed!");
|
||||
LOG_W("[sd0] Try to format and re-mount...");
|
||||
if (dfs_mkfs("elm", "sd0") == 0)
|
||||
LOG_W("[sd] File System on SD ('sd') initialization failed!");
|
||||
LOG_W("[sd] Try to format and re-mount...");
|
||||
if (dfs_mkfs("elm", "sd") == 0)
|
||||
{
|
||||
if (dfs_mount("sd0", "/", "elm", 0, 0) == 0)
|
||||
if (dfs_mount("sd", "/", "elm", 0, 0) == 0)
|
||||
{
|
||||
LOG_I("[sd0] File System on SD ('sd0') initialized!");
|
||||
LOG_I("[sd] File System on SD ('sd') initialized!");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
LOG_E("[sd0] File System on SD ('sd0') initialization failed!");
|
||||
LOG_E("[sd] File System on SD ('sd') initialization failed!");
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
INIT_ENV_EXPORT(mnt_init);
|
||||
#endif
|
||||
|
||||
@@ -3,6 +3,8 @@ menu "Hardware Drivers Config"
|
||||
config SOC_VEXPRESS_A9
|
||||
bool
|
||||
select ARCH_ARM_CORTEX_A9
|
||||
select RT_USING_CACHE
|
||||
select ARCH_ARM_MMU
|
||||
select RT_USING_COMPONENTS_INIT
|
||||
select RT_USING_USER_MAIN
|
||||
select RT_USING_GIC_V2
|
||||
|
||||
@@ -18,11 +18,21 @@
|
||||
#include "drv_timer.h"
|
||||
|
||||
#include <mmu.h>
|
||||
#ifdef RT_USING_USERSPACE
|
||||
#include <page.h>
|
||||
#include <lwp_arch.h>
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_USERSPACE
|
||||
struct mem_desc platform_mem_desc[] = {
|
||||
{KERNEL_VADDR_START, KERNEL_VADDR_START + 0x0fffffff, KERNEL_VADDR_START + PV_OFFSET, NORMAL_MEM}
|
||||
};
|
||||
#else
|
||||
struct mem_desc platform_mem_desc[] = {
|
||||
{0x10000000, 0x50000000, 0x10000000, DEVICE_MEM},
|
||||
{0x60000000, 0xe0000000, 0x60000000, NORMAL_MEM}
|
||||
{0x60000000, 0x70000000, 0x60000000, NORMAL_MEM}
|
||||
};
|
||||
#endif
|
||||
|
||||
const rt_uint32_t platform_mem_desc_size = sizeof(platform_mem_desc)/sizeof(platform_mem_desc[0]);
|
||||
|
||||
@@ -36,12 +46,37 @@ void idle_wfi(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will initialize beaglebone board
|
||||
* This function will initialize board
|
||||
*/
|
||||
|
||||
rt_mmu_info mmu_info;
|
||||
|
||||
extern size_t MMUTable[];
|
||||
|
||||
#ifdef RT_USING_USERSPACE
|
||||
rt_region_t init_page_region = {
|
||||
(uint32_t)PAGE_START,
|
||||
(uint32_t)PAGE_END,
|
||||
};
|
||||
#endif
|
||||
|
||||
void rt_hw_board_init(void)
|
||||
{
|
||||
#ifdef RT_USING_USERSPACE
|
||||
rt_hw_mmu_map_init(&mmu_info, (void*)0xf0000000, 0x10000000, MMUTable, PV_OFFSET);
|
||||
|
||||
rt_page_init(init_page_region);
|
||||
rt_hw_mmu_ioremap_init(&mmu_info, (void*)0xf0000000, 0x10000000);
|
||||
|
||||
arch_kuser_init(&mmu_info, (void*)0xffff0000);
|
||||
#else
|
||||
rt_hw_mmu_map_init(&mmu_info, (void*)0x80000000, 0x10000000, MMUTable, 0);
|
||||
rt_hw_mmu_ioremap_init(&mmu_info, (void*)0x80000000, 0x10000000);
|
||||
#endif
|
||||
|
||||
/* initialize hardware interrupt */
|
||||
rt_hw_interrupt_init();
|
||||
|
||||
/* initialize system heap */
|
||||
rt_system_heap_init(HEAP_BEGIN, HEAP_END);
|
||||
|
||||
|
||||
@@ -11,9 +11,15 @@
|
||||
#ifndef __BOARD_H__
|
||||
#define __BOARD_H__
|
||||
|
||||
#include <rtconfig.h>
|
||||
#include <realview.h>
|
||||
#include "vexpress_a9.h"
|
||||
|
||||
#include "mmu.h"
|
||||
#ifdef RT_USING_LWP
|
||||
#include "ioremap.h"
|
||||
#endif
|
||||
|
||||
#if defined(__CC_ARM)
|
||||
extern int Image$$RW_IRAM1$$ZI$$Limit;
|
||||
#define HEAP_BEGIN ((void*)&Image$$RW_IRAM1$$ZI$$Limit)
|
||||
@@ -22,8 +28,16 @@ extern int __bss_end;
|
||||
#define HEAP_BEGIN ((void*)&__bss_end)
|
||||
#endif
|
||||
|
||||
#define HEAP_END (void*)(0x60000000 + 8 * 1024 * 1024)
|
||||
#ifdef RT_USING_USERSPACE
|
||||
#define HEAP_END (void*)(KERNEL_VADDR_START + 16 * 1024 * 1024)
|
||||
#define PAGE_START HEAP_END
|
||||
#define PAGE_END (void*)(KERNEL_VADDR_START + 128 * 1024 * 1024)
|
||||
#else
|
||||
#define HEAP_END (void*)(0x60000000 + 64 * 1024 * 1024)
|
||||
#endif
|
||||
|
||||
void rt_hw_board_init(void);
|
||||
|
||||
extern rt_mmu_info mmu_info;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -12,7 +12,14 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <rtthread.h>
|
||||
#ifdef RT_USING_LWP
|
||||
#include <lwp.h>
|
||||
#include <lwp_user_mm.h>
|
||||
#endif
|
||||
#include <board.h>
|
||||
|
||||
#include "drv_clcd.h"
|
||||
#include "rt_lcd.h"
|
||||
|
||||
#define CLCD_WIDTH (BSP_LCD_WIDTH)
|
||||
#define CLCD_HEIGHT (BSP_LCD_HEIGHT)
|
||||
@@ -51,7 +58,7 @@ static rt_err_t drv_clcd_init(struct rt_device *device)
|
||||
{
|
||||
struct drv_clcd_device *lcd = CLCD_DEVICE(device);
|
||||
|
||||
lcd = lcd; /* nothing, right now */
|
||||
(void)lcd; /* nothing, right now */
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
@@ -82,8 +89,30 @@ static rt_err_t drv_clcd_control(struct rt_device *device, int cmd, void *args)
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return -RT_EINVAL;
|
||||
case FBIOGET_FSCREENINFO:
|
||||
{
|
||||
#ifdef RT_USING_USERSPACE
|
||||
struct fb_fix_screeninfo *info = (struct fb_fix_screeninfo *)args;
|
||||
strncpy(info->id, "lcd", sizeof(info->id));
|
||||
info->smem_len = lcd->width * lcd->height * 2;
|
||||
info->smem_start = (uint32_t)lwp_map_user_phy(lwp_self(), RT_NULL, lcd->fb,
|
||||
info->smem_len, 1);
|
||||
info->line_length = lcd->width * 2;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
case FBIOGET_VSCREENINFO:
|
||||
{
|
||||
struct fb_var_screeninfo *info = (struct fb_var_screeninfo *)args;
|
||||
info->bits_per_pixel = 16;
|
||||
info->xres = lcd->width;
|
||||
info->yres = lcd->height;
|
||||
}
|
||||
break;
|
||||
|
||||
case FBIOGET_DISPINFO:
|
||||
break;
|
||||
}
|
||||
|
||||
return RT_EOK;
|
||||
@@ -111,21 +140,32 @@ int drv_clcd_hw_init(void)
|
||||
|
||||
_lcd.width = CLCD_WIDTH;
|
||||
_lcd.height = CLCD_HEIGHT;
|
||||
_lcd.fb = rt_malloc(_lcd.width * _lcd.height * 2 /*RGB565 2 Bytes*/);
|
||||
rt_kprintf("try to allocate fb... | w - %d, h - %d | ", _lcd.width, _lcd.height);
|
||||
#ifdef RT_USING_USERSPACE
|
||||
_lcd.fb = rt_pages_alloc(rt_page_bits(_lcd.width * _lcd.height * 2));
|
||||
#else
|
||||
_lcd.fb = rt_malloc(_lcd.width * _lcd.height * 2);
|
||||
#endif
|
||||
rt_kprintf("done!\n");
|
||||
rt_kprintf("fb => 0x%08x\n", _lcd.fb);
|
||||
if (_lcd.fb == NULL)
|
||||
{
|
||||
rt_kprintf("initialize frame buffer failed!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(_lcd.fb, 0xff, _lcd.width * _lcd.height * 2);
|
||||
|
||||
plio = (PL111MMIO*)PL111_IOBASE;
|
||||
|
||||
plio->tim0 = 0x3F1F3C00 | ((CLCD_WIDTH/16 - 1) << 2);
|
||||
#ifdef RT_USING_USERSPACE
|
||||
plio = (PL111MMIO *)rt_ioremap((void*)PL111_IOBASE, 0x1000);
|
||||
#endif
|
||||
plio->tim0 = 0x3F1F3C00 | ((CLCD_WIDTH / 16 - 1) << 2);
|
||||
plio->tim1 = 0x080B6000 | (CLCD_HEIGHT - 1);
|
||||
|
||||
plio->upbase = (uint32_t)_lcd.fb;
|
||||
#ifdef RT_USING_USERSPACE
|
||||
plio->upbase += PV_OFFSET;
|
||||
#endif
|
||||
/* 16-bit 565 color */
|
||||
plio->control = 0x1921 | (0x6 << 1);
|
||||
|
||||
|
||||
@@ -431,9 +431,11 @@ int rt_hw_keyboard_init(void)
|
||||
rt_uint8_t value;
|
||||
rt_uint32_t id;
|
||||
struct keyboard_pl050_pdata_t *pdat;
|
||||
virtual_addr_t virt = (virtual_addr_t)KEYBOARD_ADDRESS;
|
||||
virtual_addr_t virt;
|
||||
int irq = KEYBOARD_IRQ_NUM;
|
||||
|
||||
virt = (virtual_addr_t)rt_ioremap((void*)KEYBOARD_ADDRESS, 0x1000);
|
||||
|
||||
id = (((read32(virt + 0xfec) & 0xff) << 24) |
|
||||
((read32(virt + 0xfe8) & 0xff) << 16) |
|
||||
((read32(virt + 0xfe4) & 0xff) << 8) |
|
||||
|
||||
@@ -267,6 +267,9 @@ int rt_hw_mouse_init(void)
|
||||
virtual_addr_t virt = MOUSE_ADDRESS;
|
||||
int irq = MOUSE_IRQ_NUM;
|
||||
|
||||
#ifdef RT_USING_LWP
|
||||
virt = (virtual_addr_t)rt_ioremap((void*)MOUSE_ADDRESS, 0x1000);
|
||||
#endif
|
||||
id = (((read32(virt + 0xfec) & 0xff) << 24) |
|
||||
((read32(virt + 0xfe8) & 0xff) << 16) |
|
||||
((read32(virt + 0xfe4) & 0xff) << 8) |
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "board.h"
|
||||
#include "drv_sdio.h"
|
||||
|
||||
#ifdef RT_USING_SDIO
|
||||
@@ -294,8 +295,8 @@ static rt_err_t sdhci_pl180_setclock(struct sdhci_t * sdhci, rt_uint32_t clock)
|
||||
|
||||
if(clock)
|
||||
{
|
||||
temp = read32(pdat->virt + PL180_CLOCK) | (0x1<<8);
|
||||
temp = temp; // skip warning
|
||||
temp = read32(pdat->virt + PL180_CLOCK) | (0x1 << 8);
|
||||
(void)temp; // skip warning
|
||||
write32(pdat->virt + PL180_CLOCK, 0x100);
|
||||
}
|
||||
else
|
||||
@@ -419,7 +420,12 @@ int pl180_init(void)
|
||||
}
|
||||
rt_memset(sdhci, 0, sizeof(struct sdhci_t));
|
||||
|
||||
#ifdef RT_USING_LWP
|
||||
virt = (rt_uint32_t)rt_ioremap((void*)MMC_BASE_ADDR, 0x1000);
|
||||
#else
|
||||
virt = MMC_BASE_ADDR;
|
||||
#endif
|
||||
|
||||
id = (((read32((virt + 0xfec)) & 0xff) << 24) |
|
||||
((read32((virt + 0xfe8)) & 0xff) << 16) |
|
||||
((read32((virt + 0xfe4)) & 0xff) << 8) |
|
||||
|
||||
@@ -10,18 +10,23 @@
|
||||
|
||||
#include <board.h>
|
||||
#include <rtthread.h>
|
||||
#include <rtdevice.h>
|
||||
#include <automac.h>
|
||||
#include <netif/ethernetif.h>
|
||||
#include <lwipopts.h>
|
||||
#include <automac.h>
|
||||
#include "delay.h"
|
||||
|
||||
#include "mmu.h"
|
||||
#include "drv_smc911x.h"
|
||||
|
||||
#define MAX_ADDR_LEN 6
|
||||
#define SMC911X_EMAC_DEVICE(eth) (struct eth_device_smc911x*)(eth)
|
||||
|
||||
#include "drv_smc911x.h"
|
||||
|
||||
#define DRIVERNAME "EMAC"
|
||||
|
||||
#define DBG_LVL DBG_LOG
|
||||
#define DBG_TAG "EMAC"
|
||||
#include <rtdbg.h>
|
||||
|
||||
struct eth_device_smc911x
|
||||
{
|
||||
/* inherit from Ethernet device */
|
||||
@@ -34,6 +39,7 @@ struct eth_device_smc911x
|
||||
};
|
||||
static struct eth_device_smc911x _emac;
|
||||
|
||||
|
||||
#if defined (CONFIG_SMC911X_32_BIT)
|
||||
rt_inline uint32_t smc911x_reg_read(struct eth_device_smc911x *dev, uint32_t offset)
|
||||
{
|
||||
@@ -117,7 +123,7 @@ static int smc911x_detect_chip(struct eth_device_smc911x *dev)
|
||||
}
|
||||
else if (val != 0x87654321)
|
||||
{
|
||||
rt_kprintf(DRIVERNAME ": Invalid chip endian 0x%08lx\n", val);
|
||||
LOG_E("Invalid chip endian 0x%08lx\n", val);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -348,21 +354,12 @@ static rt_err_t smc911x_emac_init(rt_device_t dev)
|
||||
/* Turn on Tx + Rx */
|
||||
smc911x_enable(emac);
|
||||
|
||||
#if 1
|
||||
/* Interrupt on every received packet */
|
||||
smc911x_reg_write(emac, LAN9118_FIFO_INT, 0x01 << 8);
|
||||
smc911x_reg_write(emac, LAN9118_INT_EN, LAN9118_INT_EN_RDFL_EN | LAN9118_INT_RSFL);
|
||||
|
||||
/* enable interrupt */
|
||||
smc911x_reg_write(emac, LAN9118_IRQ_CFG, LAN9118_IRQ_CFG_IRQ_EN | LAN9118_IRQ_CFG_IRQ_POL | LAN9118_IRQ_CFG_IRQ_TYPE);
|
||||
#else
|
||||
|
||||
/* disable interrupt */
|
||||
smc911x_reg_write(emac, LAN9118_INT_EN, 0);
|
||||
value = smc911x_reg_read(emac, LAN9118_IRQ_CFG);
|
||||
value &= ~LAN9118_IRQ_CFG_IRQ_EN;
|
||||
smc911x_reg_write(emac, LAN9118_IRQ_CFG, value);
|
||||
#endif
|
||||
|
||||
rt_hw_interrupt_install(emac->irqno, smc911x_isr, emac, "smc911x");
|
||||
rt_hw_interrupt_umask(emac->irqno);
|
||||
@@ -433,7 +430,7 @@ rt_err_t smc911x_emac_tx(rt_device_t dev, struct pbuf *p)
|
||||
|
||||
if (!status) return 0;
|
||||
|
||||
rt_kprintf(DRIVERNAME ": failed to send packet: %s%s%s%s%s\n",
|
||||
LOG_E(DRIVERNAME ": failed to send packet: %s%s%s%s%s\n",
|
||||
status & LAN9118_TXS_LOC ? "LAN9118_TXS_LOC " : "",
|
||||
status & LAN9118_TXS_LCOL ? "LAN9118_TXS_LCOL " : "",
|
||||
status & LAN9118_TXS_ECOL ? "LAN9118_TXS_ECOL " : "",
|
||||
@@ -501,7 +498,12 @@ const static struct rt_device_ops smc911x_emac_ops =
|
||||
|
||||
int smc911x_emac_hw_init(void)
|
||||
{
|
||||
rt_memset(&_emac, 0x0, sizeof(_emac));
|
||||
|
||||
_emac.iobase = VEXPRESS_ETH_BASE;
|
||||
#ifdef RT_USING_LWP
|
||||
_emac.iobase = (uint32_t)rt_ioremap((void*)VEXPRESS_ETH_BASE, 0x1000);
|
||||
#endif
|
||||
_emac.irqno = IRQ_VEXPRESS_A9_ETH;
|
||||
|
||||
if (smc911x_detect_chip(&_emac))
|
||||
|
||||
@@ -12,10 +12,17 @@
|
||||
#include <rtthread.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "mmu.h"
|
||||
#include "board.h"
|
||||
|
||||
#define TIMER01_HW_BASE 0x10011000
|
||||
#define TIMER23_HW_BASE 0x10012000
|
||||
#define TIMER01_HW_BASE_PHY 0x10011000
|
||||
#define TIMER23_HW_BASE_PHY 0x10012000
|
||||
|
||||
void* timer01_hw_base;
|
||||
void* timer23_hw_base;
|
||||
|
||||
#define TIMER01_HW_BASE timer01_hw_base
|
||||
#define TIMER23_HW_BASE timer23_hw_base
|
||||
|
||||
#define TIMER_LOAD(hw_base) __REG32(hw_base + 0x00)
|
||||
#define TIMER_VALUE(hw_base) __REG32(hw_base + 0x04)
|
||||
@@ -51,8 +58,10 @@
|
||||
#define TIMER_MIS(hw_base) __REG32(hw_base + 0x14)
|
||||
#define TIMER_BGLOAD(hw_base) __REG32(hw_base + 0x18)
|
||||
|
||||
#define SYS_CTRL __REG32(REALVIEW_SCTL_BASE)
|
||||
#define TIMER_HW_BASE REALVIEW_TIMER2_3_BASE
|
||||
void* sys_ctrl;
|
||||
#define SYS_CTRL __REG32(sys_ctrl)
|
||||
void* timer_hw_base;
|
||||
#define TIMER_HW_BASE timer_hw_base
|
||||
|
||||
static void rt_hw_timer_isr(int vector, void *param)
|
||||
{
|
||||
@@ -65,6 +74,14 @@ int rt_hw_timer_init(void)
|
||||
{
|
||||
rt_uint32_t val;
|
||||
|
||||
#ifdef RT_USING_LWP
|
||||
sys_ctrl = (void*)rt_ioremap((void*)REALVIEW_SCTL_BASE, 0x1000);
|
||||
timer_hw_base = (void*)rt_ioremap((void*)REALVIEW_TIMER2_3_BASE, 0x1000);
|
||||
#else
|
||||
sys_ctrl = (void*)REALVIEW_SCTL_BASE;
|
||||
timer_hw_base = (void*)REALVIEW_TIMER2_3_BASE;
|
||||
#endif
|
||||
|
||||
SYS_CTRL |= REALVIEW_REFCLK;
|
||||
|
||||
/* Setup Timer0 for generating irq */
|
||||
@@ -91,6 +108,11 @@ void timer_init(int timer, unsigned int preload)
|
||||
|
||||
if (timer == 0)
|
||||
{
|
||||
#ifdef RT_USING_LWP
|
||||
timer01_hw_base = (void*)rt_ioremap((void*)TIMER01_HW_BASE_PHY, 0x1000);
|
||||
#else
|
||||
timer01_hw_base = (void*)TIMER01_HW_BASE_PHY;
|
||||
#endif
|
||||
/* Setup Timer0 for generating irq */
|
||||
val = TIMER_CTRL(TIMER01_HW_BASE);
|
||||
val &= ~TIMER_CTRL_ENABLE;
|
||||
@@ -104,6 +126,11 @@ void timer_init(int timer, unsigned int preload)
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef RT_USING_LWP
|
||||
timer23_hw_base = (void*)rt_ioremap((void*)TIMER23_HW_BASE_PHY, 0x1000);
|
||||
#else
|
||||
timer01_hw_base = (void*)TIMER23_HW_BASE_PHY;
|
||||
#endif
|
||||
/* Setup Timer1 for generating irq */
|
||||
val = TIMER_CTRL(TIMER23_HW_BASE);
|
||||
val &= ~TIMER_CTRL_ENABLE;
|
||||
|
||||
@@ -325,7 +325,8 @@ struct rt_hw_register
|
||||
unsigned long ORIG_r0;
|
||||
};
|
||||
|
||||
#include <armv7.h>
|
||||
#include <rtdef.h>
|
||||
#include <cpuport.h>
|
||||
|
||||
/* Interrupt Control Interface */
|
||||
#define ARM_GIC_CPU_BASE 0x1E000000
|
||||
|
||||
59
bsp/qemu-vexpress-a9/drivers/rt_lcd.h
Normal file
59
bsp/qemu-vexpress-a9/drivers/rt_lcd.h
Normal file
@@ -0,0 +1,59 @@
|
||||
#ifndef RT_LCD_H__
|
||||
#define RT_LCD_H__
|
||||
|
||||
|
||||
/* ioctls
|
||||
0x46 is 'F' */
|
||||
#define FBIOGET_VSCREENINFO 0x4600
|
||||
#define FBIOPUT_VSCREENINFO 0x4601
|
||||
#define FBIOGET_FSCREENINFO 0x4602
|
||||
#define FBIOGETCMAP 0x4604
|
||||
#define FBIOPUTCMAP 0x4605
|
||||
#define FBIOPAN_DISPLAY 0x4606
|
||||
#define FBIO_CURSOR 0x4608
|
||||
/* #define FBIOGET_MONITORSPEC 0x460C */
|
||||
/* #define FBIOPUT_MONITORSPEC 0x460D */
|
||||
/* #define FBIOSWITCH_MONIBIT 0x460E */
|
||||
#define FBIOGET_CON2FBMAP 0x460F
|
||||
#define FBIOPUT_CON2FBMAP 0x4610
|
||||
#define FBIOBLANK 0x4611 /* arg: 0 or vesa level + 1 */
|
||||
#define FBIOGET_VBLANK 0x4612
|
||||
#define FBIO_ALLOC 0x4613
|
||||
#define FBIO_FREE 0x4614
|
||||
#define FBIOGET_GLYPH 0x4615
|
||||
#define FBIOGET_HWCINFO 0x4616
|
||||
#define FBIOPUT_MODEINFO 0x4617
|
||||
#define FBIOGET_DISPINFO 0x4618
|
||||
#define FBIO_WAITFORVSYNC 0x4620
|
||||
|
||||
struct fb_bitfield
|
||||
{
|
||||
uint32_t offset; /* beginning of bitfield */
|
||||
uint32_t length; /* length of bitfield */
|
||||
uint32_t msb_right; /* != 0 : Most significant bit is */
|
||||
/* right */
|
||||
};
|
||||
|
||||
struct fb_var_screeninfo
|
||||
{
|
||||
uint32_t xres;
|
||||
uint32_t yres;
|
||||
|
||||
uint32_t bits_per_pixel;
|
||||
|
||||
struct fb_bitfield red; /* bitfield in fb mem if true color, */
|
||||
struct fb_bitfield green; /* else only length is significant */
|
||||
struct fb_bitfield blue;
|
||||
struct fb_bitfield transp; /* transparency */
|
||||
};
|
||||
|
||||
struct fb_fix_screeninfo
|
||||
{
|
||||
char id[16];
|
||||
unsigned long smem_start;
|
||||
uint32_t smem_len;
|
||||
|
||||
uint32_t line_length;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -19,6 +19,10 @@
|
||||
#ifdef RT_USING_SMP
|
||||
#include <interrupt.h>
|
||||
|
||||
#ifdef RT_USING_USERSPACE
|
||||
#include <mmu.h>
|
||||
#endif
|
||||
|
||||
static void rt_hw_timer2_isr(int vector, void *param)
|
||||
{
|
||||
rt_tick_increase();
|
||||
@@ -26,28 +30,34 @@ static void rt_hw_timer2_isr(int vector, void *param)
|
||||
timer_clear_pending(0);
|
||||
}
|
||||
|
||||
void set_secondary_cpu_boot_address(void)
|
||||
{
|
||||
extern void secondary_cpu_start(void);
|
||||
uint32_t *boot_address = (uint32_t *)0x10000030;
|
||||
*(boot_address + 1) = ~0ul;
|
||||
*boot_address = (uint32_t )&secondary_cpu_start;
|
||||
}
|
||||
|
||||
void rt_hw_secondary_cpu_up(void)
|
||||
{
|
||||
set_secondary_cpu_boot_address();
|
||||
__asm__ volatile ("dsb":::"memory");
|
||||
volatile void **plat_boot_reg = (volatile void **)0x10000034;
|
||||
char *entry = (char *)rt_secondary_cpu_entry;
|
||||
|
||||
#ifdef RT_USING_USERSPACE
|
||||
plat_boot_reg = (volatile void **)rt_hw_mmu_map(&mmu_info, 0, (void *)plat_boot_reg, 0x1000, MMU_MAP_K_RW);
|
||||
if (!plat_boot_reg)
|
||||
{
|
||||
/* failed */
|
||||
return;
|
||||
}
|
||||
entry += PV_OFFSET;
|
||||
#endif
|
||||
*plat_boot_reg-- = (void *)(size_t)-1;
|
||||
*plat_boot_reg = (void *)entry;
|
||||
rt_hw_dsb();
|
||||
rt_hw_ipi_send(0, 1 << 1);
|
||||
}
|
||||
|
||||
void secondary_cpu_c_start(void)
|
||||
/* Interface */
|
||||
void rt_hw_secondary_cpu_bsp_start(void)
|
||||
{
|
||||
rt_hw_vector_init();
|
||||
|
||||
rt_hw_spin_lock(&_cpus_lock);
|
||||
|
||||
arm_gic_cpu_init(0, REALVIEW_GIC_CPU_BASE);
|
||||
arm_gic_cpu_init(0, 0);
|
||||
arm_gic_set_cpu(0, IRQ_PBA8_TIMER0_1, 0x2);
|
||||
|
||||
timer_init(0, 10000);
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
#include <rtdevice.h>
|
||||
|
||||
#include "serial.h"
|
||||
#include "board.h"
|
||||
#include "mmu.h"
|
||||
|
||||
struct hw_uart_device
|
||||
{
|
||||
@@ -132,6 +134,9 @@ int rt_hw_uart_init(void)
|
||||
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
|
||||
|
||||
#ifdef RT_USING_UART0
|
||||
#ifdef RT_USING_LWP
|
||||
_uart0_device.hw_base = (uint32_t)rt_ioremap((void*)_uart0_device.hw_base, 0x1000);
|
||||
#endif
|
||||
uart = &_uart0_device;
|
||||
|
||||
_serial0.ops = &_uart_ops;
|
||||
@@ -147,6 +152,9 @@ int rt_hw_uart_init(void)
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_UART1
|
||||
#ifdef RT_USING_LWP
|
||||
_uart1_device.hw_base = (uint32_t)rt_ioremap((void*)_uart1_device.hw_base, 0x1000);
|
||||
#endif
|
||||
uart = &_uart1_device;
|
||||
_serial1.ops = &_uart_ops;
|
||||
_serial1.config = config;
|
||||
|
||||
111
bsp/qemu-vexpress-a9/link-lwp.lds
Normal file
111
bsp/qemu-vexpress-a9/link-lwp.lds
Normal file
@@ -0,0 +1,111 @@
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
SECTIONS
|
||||
{
|
||||
/*. = 0x60010000; */
|
||||
. = 0xc0010000;
|
||||
|
||||
__text_start = .;
|
||||
.text :
|
||||
{
|
||||
*(.vectors)
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
|
||||
/* section information for utest */
|
||||
. = ALIGN(4);
|
||||
__rt_utest_tc_tab_start = .;
|
||||
KEEP(*(UtestTcTab))
|
||||
__rt_utest_tc_tab_end = .;
|
||||
|
||||
/* section information for finsh shell */
|
||||
. = ALIGN(4);
|
||||
__fsymtab_start = .;
|
||||
KEEP(*(FSymTab))
|
||||
__fsymtab_end = .;
|
||||
. = ALIGN(4);
|
||||
__vsymtab_start = .;
|
||||
KEEP(*(VSymTab))
|
||||
__vsymtab_end = .;
|
||||
|
||||
/* section information for var export */
|
||||
. = ALIGN(4);
|
||||
__ve_table_start = .;
|
||||
KEEP(*(SORT(*.VarExpTab.*)))
|
||||
__ve_table_end = .;
|
||||
|
||||
/* section information for modules */
|
||||
. = ALIGN(4);
|
||||
__rtmsymtab_start = .;
|
||||
KEEP(*(RTMSymTab))
|
||||
__rtmsymtab_end = .;
|
||||
|
||||
/* section information for initialization */
|
||||
. = ALIGN(4);
|
||||
__rt_init_start = .;
|
||||
KEEP(*(SORT(.rti_fn*)))
|
||||
__rt_init_end = .;
|
||||
} =0
|
||||
__text_end = .;
|
||||
|
||||
.ARM.exidx :
|
||||
{
|
||||
__exidx_start = .;
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
__exidx_end = .;
|
||||
}
|
||||
|
||||
__rodata_start = .;
|
||||
.rodata : { *(.rodata) *(.rodata.*) }
|
||||
__rodata_end = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
.ctors :
|
||||
{
|
||||
PROVIDE(__ctors_start__ = .);
|
||||
/* new GCC version uses .init_array */
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__ctors_end__ = .);
|
||||
}
|
||||
|
||||
.dtors :
|
||||
{
|
||||
PROVIDE(__dtors_start__ = .);
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
KEEP(*(.fini_array))
|
||||
PROVIDE(__dtors_end__ = .);
|
||||
}
|
||||
|
||||
. = ALIGN(8);
|
||||
__data_start = .;
|
||||
.data :
|
||||
{
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
}
|
||||
__data_end = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
__bss_start = .;
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(COMMON)
|
||||
. = ALIGN(4);
|
||||
}
|
||||
. = ALIGN(4);
|
||||
__bss_end = .;
|
||||
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||
.comment 0 : { *(.comment) }
|
||||
|
||||
_end = .;
|
||||
}
|
||||
@@ -47,9 +47,12 @@ SECTIONS
|
||||
} =0
|
||||
__text_end = .;
|
||||
|
||||
__exidx_start = .;
|
||||
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
|
||||
__exidx_end = .;
|
||||
.ARM.exidx :
|
||||
{
|
||||
__exidx_start = .;
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
__exidx_end = .;
|
||||
}
|
||||
|
||||
__rodata_start = .;
|
||||
.rodata : { *(.rodata) *(.rodata.*) }
|
||||
@@ -68,8 +71,8 @@ SECTIONS
|
||||
.dtors :
|
||||
{
|
||||
PROVIDE(__dtors_start__ = .);
|
||||
KEEP(*(SORT(.dtors.*)))
|
||||
KEEP(*(.dtors))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
KEEP(*(.fini_array))
|
||||
PROVIDE(__dtors_end__ = .);
|
||||
}
|
||||
|
||||
@@ -82,7 +85,7 @@ SECTIONS
|
||||
}
|
||||
__data_end = .;
|
||||
|
||||
. = ALIGN(8);
|
||||
. = ALIGN(4);
|
||||
__bss_start = .;
|
||||
.bss :
|
||||
{
|
||||
|
||||
@@ -3,4 +3,4 @@ if exist sd.bin goto run
|
||||
qemu-img create -f raw sd.bin 64M
|
||||
|
||||
:run
|
||||
qemu-system-arm -M vexpress-a9 -kernel rtthread.elf -serial stdio -sd sd.bin -S -s
|
||||
qemu-system-arm -M vexpress-a9 -kernel rtthread.bin -serial stdio -sd sd.bin -S -s
|
||||
|
||||
@@ -7,19 +7,16 @@
|
||||
/* RT-Thread Kernel */
|
||||
|
||||
#define RT_NAME_MAX 8
|
||||
#define RT_USING_SMP
|
||||
#define RT_CPUS_NR 2
|
||||
#define RT_ALIGN_SIZE 4
|
||||
#define RT_THREAD_PRIORITY_32
|
||||
#define RT_THREAD_PRIORITY_MAX 32
|
||||
#define RT_THREAD_PRIORITY_256
|
||||
#define RT_THREAD_PRIORITY_MAX 256
|
||||
#define RT_TICK_PER_SECOND 100
|
||||
#define RT_USING_OVERFLOW_CHECK
|
||||
#define RT_USING_HOOK
|
||||
#define RT_HOOK_USING_FUNC_PTR
|
||||
#define RT_USING_IDLE_HOOK
|
||||
#define RT_IDLE_HOOK_LIST_SIZE 4
|
||||
#define IDLE_THREAD_STACK_SIZE 1024
|
||||
#define SYSTEM_THREAD_STACK_SIZE 1024
|
||||
#define IDLE_THREAD_STACK_SIZE 4096
|
||||
#define RT_USING_TIMER_SOFT
|
||||
#define RT_TIMER_THREAD_PRIO 4
|
||||
#define RT_TIMER_THREAD_STACK_SIZE 1024
|
||||
@@ -36,13 +33,11 @@
|
||||
#define RT_USING_EVENT
|
||||
#define RT_USING_MAILBOX
|
||||
#define RT_USING_MESSAGEQUEUE
|
||||
#define RT_USING_SIGNALS
|
||||
|
||||
/* Memory Management */
|
||||
|
||||
#define RT_USING_MEMPOOL
|
||||
#define RT_USING_SMALL_MEM
|
||||
#define RT_USING_SLAB
|
||||
#define RT_USING_MEMHEAP
|
||||
#define RT_MEMHEAP_FAST_MODE
|
||||
#define RT_USING_SMALL_MEM_AS_HEAP
|
||||
@@ -57,9 +52,12 @@
|
||||
#define RT_USING_CONSOLE
|
||||
#define RT_CONSOLEBUF_SIZE 256
|
||||
#define RT_CONSOLE_DEVICE_NAME "uart0"
|
||||
#define RT_VER_NUM 0x40101
|
||||
#define ARCH_ARM
|
||||
#define RT_VER_NUM 0x50000
|
||||
#define RT_USING_CACHE
|
||||
#define RT_USING_CPU_FFS
|
||||
#define ARCH_MM_MMU
|
||||
#define ARCH_ARM
|
||||
#define ARCH_ARM_MMU
|
||||
#define ARCH_ARM_CORTEX_A
|
||||
#define RT_USING_GIC_V2
|
||||
#define ARCH_ARM_CORTEX_A9
|
||||
@@ -77,16 +75,16 @@
|
||||
#define FINSH_THREAD_PRIORITY 20
|
||||
#define FINSH_THREAD_STACK_SIZE 4096
|
||||
#define FINSH_USING_HISTORY
|
||||
#define FINSH_HISTORY_LINES 5
|
||||
#define FINSH_HISTORY_LINES 10
|
||||
#define FINSH_USING_SYMTAB
|
||||
#define FINSH_CMD_SIZE 80
|
||||
#define FINSH_CMD_SIZE 256
|
||||
#define MSH_USING_BUILT_IN_COMMANDS
|
||||
#define FINSH_USING_DESCRIPTION
|
||||
#define FINSH_ARG_MAX 10
|
||||
#define RT_USING_DFS
|
||||
#define DFS_USING_POSIX
|
||||
#define DFS_USING_WORKDIR
|
||||
#define DFS_FILESYSTEMS_MAX 4
|
||||
#define DFS_FILESYSTEMS_MAX 8
|
||||
#define DFS_FILESYSTEM_TYPES_MAX 8
|
||||
#define DFS_FD_MAX 32
|
||||
#define RT_USING_DFS_ELMFAT
|
||||
@@ -106,22 +104,24 @@
|
||||
#define RT_DFS_ELM_MUTEX_TIMEOUT 3000
|
||||
#define RT_USING_DFS_DEVFS
|
||||
#define RT_USING_DFS_ROMFS
|
||||
#define RT_USING_DFS_RAMFS
|
||||
#define RT_USING_LWP
|
||||
#define RT_USING_DFS_TMPFS
|
||||
|
||||
/* Device Drivers */
|
||||
|
||||
#define RT_USING_DEVICE_IPC
|
||||
#define RT_UNAMED_PIPE_NUMBER 64
|
||||
#define RT_USING_SYSTEM_WORKQUEUE
|
||||
#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048
|
||||
#define RT_SYSTEM_WORKQUEUE_PRIORITY 23
|
||||
#define RT_USING_SERIAL
|
||||
#define RT_USING_SERIAL_V1
|
||||
#define RT_SERIAL_USING_DMA
|
||||
#define RT_SERIAL_RB_BUFSZ 64
|
||||
#define RT_SERIAL_RB_BUFSZ 256
|
||||
#define RT_USING_I2C
|
||||
#define RT_USING_I2C_BITOPS
|
||||
#define RT_USING_PIN
|
||||
#define RT_USING_NULL
|
||||
#define RT_USING_ZERO
|
||||
#define RT_USING_RANDOM
|
||||
#define RT_USING_MTD_NOR
|
||||
#define RT_USING_MTD_NAND
|
||||
#define RT_MTD_NAND_DEBUG
|
||||
@@ -140,6 +140,7 @@
|
||||
#define RT_SFUD_USING_FLASH_INFO_TABLE
|
||||
#define RT_SFUD_SPI_MAX_HZ 50000000
|
||||
#define RT_USING_WDT
|
||||
#define RT_USING_DEV_BUS
|
||||
|
||||
/* Using USB */
|
||||
|
||||
@@ -155,81 +156,24 @@
|
||||
#define RT_USING_POSIX_STDIO
|
||||
#define RT_USING_POSIX_POLL
|
||||
#define RT_USING_POSIX_SELECT
|
||||
#define RT_USING_POSIX_SOCKET
|
||||
#define RT_USING_POSIX_TERMIOS
|
||||
#define RT_USING_POSIX_AIO
|
||||
#define RT_USING_POSIX_DELAY
|
||||
#define RT_USING_POSIX_CLOCK
|
||||
#define RT_USING_PTHREADS
|
||||
#define PTHREAD_NUM_MAX 8
|
||||
#define RT_USING_POSIX_TIMER
|
||||
|
||||
/* Interprocess Communication (IPC) */
|
||||
|
||||
#define RT_USING_POSIX_PIPE
|
||||
#define RT_USING_POSIX_PIPE_SIZE 512
|
||||
#define RT_USING_POSIX_MESSAGE_QUEUE
|
||||
#define RT_USING_POSIX_MESSAGE_SEMAPHORE
|
||||
|
||||
/* Socket is in the 'Network' category */
|
||||
|
||||
#define RT_USING_CPLUSPLUS
|
||||
|
||||
/* Network */
|
||||
|
||||
#define RT_USING_SAL
|
||||
#define SAL_INTERNET_CHECK
|
||||
|
||||
/* Docking with protocol stacks */
|
||||
|
||||
#define SAL_USING_LWIP
|
||||
#define SAL_USING_POSIX
|
||||
#define RT_USING_NETDEV
|
||||
#define NETDEV_USING_IFCONFIG
|
||||
#define NETDEV_USING_PING
|
||||
#define NETDEV_USING_NETSTAT
|
||||
#define NETDEV_USING_AUTO_DEFAULT
|
||||
#define NETDEV_IPV4 1
|
||||
#define NETDEV_IPV6 0
|
||||
#define RT_USING_LWIP
|
||||
#define RT_USING_LWIP203
|
||||
#define RT_USING_LWIP_VER_NUM 0x20003
|
||||
#define RT_LWIP_MEM_ALIGNMENT 4
|
||||
#define RT_LWIP_ICMP
|
||||
#define RT_LWIP_DNS
|
||||
#define RT_LWIP_DHCP
|
||||
#define IP_SOF_BROADCAST 1
|
||||
#define IP_SOF_BROADCAST_RECV 1
|
||||
|
||||
/* Static IPv4 Address */
|
||||
|
||||
#define RT_LWIP_IPADDR "192.168.1.30"
|
||||
#define RT_LWIP_GWADDR "192.168.1.1"
|
||||
#define RT_LWIP_MSKADDR "255.255.255.0"
|
||||
#define RT_LWIP_UDP
|
||||
#define RT_LWIP_TCP
|
||||
#define RT_LWIP_RAW
|
||||
#define RT_MEMP_NUM_NETCONN 8
|
||||
#define RT_LWIP_PBUF_NUM 16
|
||||
#define RT_LWIP_RAW_PCB_NUM 4
|
||||
#define RT_LWIP_UDP_PCB_NUM 4
|
||||
#define RT_LWIP_TCP_PCB_NUM 4
|
||||
#define RT_LWIP_TCP_SEG_NUM 40
|
||||
#define RT_LWIP_TCP_SND_BUF 8196
|
||||
#define RT_LWIP_TCP_WND 8196
|
||||
#define RT_LWIP_TCPTHREAD_PRIORITY 10
|
||||
#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8
|
||||
#define RT_LWIP_TCPTHREAD_STACKSIZE 1024
|
||||
#define RT_LWIP_ETHTHREAD_PRIORITY 12
|
||||
#define RT_LWIP_ETHTHREAD_STACKSIZE 1024
|
||||
#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8
|
||||
#define RT_LWIP_REASSEMBLY_FRAG
|
||||
#define LWIP_NETIF_STATUS_CALLBACK 1
|
||||
#define LWIP_NETIF_LINK_CALLBACK 1
|
||||
#define SO_REUSE 1
|
||||
#define LWIP_SO_RCVTIMEO 1
|
||||
#define LWIP_SO_SNDTIMEO 1
|
||||
#define LWIP_SO_RCVBUF 1
|
||||
#define LWIP_SO_LINGER 0
|
||||
#define LWIP_NETIF_LOOPBACK 0
|
||||
#define RT_LWIP_USING_PING
|
||||
|
||||
/* Utilities */
|
||||
|
||||
@@ -294,6 +238,11 @@
|
||||
|
||||
/* peripheral libraries and drivers */
|
||||
|
||||
/* sensors drivers */
|
||||
|
||||
|
||||
/* touch drivers */
|
||||
|
||||
|
||||
/* Kendryte SDK */
|
||||
|
||||
@@ -301,6 +250,9 @@
|
||||
/* AI packages */
|
||||
|
||||
|
||||
/* Signal Processing and Control Algorithm Packages */
|
||||
|
||||
|
||||
/* miscellaneous packages */
|
||||
|
||||
/* project laboratory */
|
||||
@@ -311,6 +263,39 @@
|
||||
/* entertainment: terminal games and other interesting software packages */
|
||||
|
||||
|
||||
/* Arduino libraries */
|
||||
|
||||
|
||||
/* Projects */
|
||||
|
||||
|
||||
/* Sensors */
|
||||
|
||||
|
||||
/* Display */
|
||||
|
||||
|
||||
/* Timing */
|
||||
|
||||
|
||||
/* Data Processing */
|
||||
|
||||
|
||||
/* Data Storage */
|
||||
|
||||
/* Communication */
|
||||
|
||||
|
||||
/* Device Control */
|
||||
|
||||
|
||||
/* Other */
|
||||
|
||||
/* Signal IO */
|
||||
|
||||
|
||||
/* Uncategorized */
|
||||
|
||||
/* Privated Packages of RealThread */
|
||||
|
||||
|
||||
@@ -328,6 +313,5 @@
|
||||
|
||||
#define RT_USING_UART0
|
||||
#define RT_USING_UART1
|
||||
#define BSP_DRV_EMAC
|
||||
|
||||
#endif
|
||||
|
||||
@@ -33,6 +33,9 @@ PLATFORM = 'gcc'
|
||||
EXEC_PATH = os.getenv('RTT_EXEC_PATH') or r'/usr/bin'
|
||||
BUILD = 'debug'
|
||||
|
||||
# LINK_SCRIPT = 'link-lwp.lds'
|
||||
LINK_SCRIPT = 'link.lds'
|
||||
|
||||
if PLATFORM == 'gcc':
|
||||
# toolchains
|
||||
PREFIX = os.getenv('RTT_CC_PREFIX') or 'arm-none-eabi-'
|
||||
@@ -52,8 +55,8 @@ if PLATFORM == 'gcc':
|
||||
|
||||
CXXFLAGS= DEVICE + CFPFLAGS + ' -Wall'
|
||||
CFLAGS = DEVICE + CFPFLAGS + ' -Wall -std=gnu99'
|
||||
AFLAGS = DEVICE + ' -c' + AFPFLAGS + ' -x assembler-with-cpp'
|
||||
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,system_vectors -T link.lds' + ' -lsupc++ -lgcc -static'
|
||||
AFLAGS = DEVICE + ' -c' + AFPFLAGS + ' -x assembler-with-cpp'
|
||||
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,system_vectors -T '+ LINK_SCRIPT + ' -lsupc++ -lgcc -static'
|
||||
CPATH = ''
|
||||
LPATH = ''
|
||||
|
||||
|
||||
Reference in New Issue
Block a user