页次: 1
由于公司与猎头公司签有协议,因此不便直接写名公司以及厂商名称,但聪明如电子工程师的你看到这个帖子时肯定推断得到。
主要工作内容:负责全球排名靠前的欧系半导体厂商的知名SOC系列的推广和协助客户调试(原厂也有FAE和AE团队作技术后盾),技术要求有一两年的嵌入式LINUX开发经验即可(当然经验越多越好),应具备有良好的沟通内力。如果有将来转销售或PM想法的小伙伴们更欢迎!!!
待遇: 薪资面谈(由用人部门和HR定级决定),除开年终奖外还会有季度奖(奖金规则明晰),有交通、交际、通信报销。
公司福利介绍:入职即有15天年假(跟工作年限无关),工作日如是生日可休息一天,一委度有三天带薪病假,不超过一天的病假可以不用请假(病假这一块我记得不是太清,但应该相差不大,具体假期细则可同HR确认),除常规社保医保外还有商业险,可以覆盖直系亲属,无考勤要求,每年有多次团建(不是搞体能那种)机会(具体次数取决于当年团队生意效益)。
工作地点: 深圳
可以加VX: 19924553514
要用C开发android的APP,当然是选AWTK啦:),常见的插件都有,自定义插件也很简单:
https://github.com/zlgopen/awtk-android
https://github.com/zlgopen/awtk-mobile-plugins
呵呵,license搞起,架构文档缺失,玩不起来。
boot使用的是这个例子, https://whycan.com/t_3645.html
于是想在这个boot上改个IAP,我修改了start.S,如下
/*
* Exception vector table
*/
.text
.arm
.global _start
_start:
/* Boot head information for BROM */
//.long 0xea000016
//.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
//.long 0, __bootloader_size
//.byte 'S', 'P', 'L', 2
//.long 0, 0
//.long 0, 0, 0, 0, 0, 0, 0, 0
//.long 0, 0, 0, 0, 0, 0, 0, 0 /* 0x40 - boot params, 0x58 - fel boot type, 0x5c - dram size */
_vector:
b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
_undefined_instruction:
.word undefined_instruction
_software_interrupt:
.word software_interrupt
_prefetch_abort:
.word prefetch_abort
_data_abort:
.word data_abort
_not_used:
.word not_used
_irq:
.word irq
_fiq:
.word fiq
/*
* The actual reset code
*/
reset:
/* Save boot params to 0x00000040 */
//ldr r0, =0x00000040
//str sp, [r0, #0]
//str lr, [r0, #4]
//mrs lr, cpsr
//str lr, [r0, #8]
//mrc p15, 0, lr, c1, c0, 0
//str lr, [r0, #12]
//mrc p15, 0, lr, c1, c0, 0
//str lr, [r0, #16]
/* Check boot type just for fel */
// mov r0, #0x0
// ldr r1, [r0, #8]
// ldr r2, =0x4c45462e
// cmp r1, r2
// bne 1f
// ldr r1, =0x1
// str r1, [r0, #0x58]
//1: nop
/* Enter svc mode and mask interrupts */
// mrs r0, cpsr
// bic r0, r0, #0x1f
// orr r0, r0, #0xd3
// msr cpsr, r0
/* Set vector to the low address */
mrc p15, 0, r0, c1, c0, 0
bic r0, #(1<<13)
mcr p15, 0, r0, c1, c0, 0
/* Copy vector to the correct address */
adr r0, _vector
mrc p15, 0, r2, c1, c0, 0
ands r2, r2, #(1 << 13)
ldreq r1, =0x00000000
ldrne r1, =0xffff0000
ldmia r0!, {r2-r8, r10}
stmia r1!, {r2-r8, r10}
ldmia r0!, {r2-r8, r10}
stmia r1!, {r2-r8, r10}
/* Initial system clock, ddr add uart */
// bl sys_clock_init
// bl sys_dram_init
// bl sys_uart_init
/* Boot speed up, leave slower sram */
// adr r0, _start
// ldr r1, =_start
// cmp r0, r1
// beq _speedup
// ldr r0, =0x81f80000
// adr r1, _start
// mov r2, #0x4000
// bl memcpy
// ldr r0, =_speedup
// ldr r1, =_start
// sub r0, r0, r1
// ldr r1, =0x81f80000
// add r0, r0, r1
// mov pc, r0
//_speedup:
// nop
/* Copyself to link address */
// adr r0, _start
// ldr r1, =_start
// cmp r0, r1
// beq 1f
// bl sys_copyself
//1: nop
/* Initialize stacks */
mrs r0, cpsr
bic r0, r0, #0x1f
orr r1, r0, #0x1b
msr cpsr_cxsf, r1
ldr sp, _stack_und_end
bic r0, r0, #0x1f
orr r1, r0, #0x17
msr cpsr_cxsf, r1
ldr sp, _stack_abt_end
bic r0, r0, #0x1f
orr r1, r0, #0x12
msr cpsr_cxsf, r1
ldr sp, _stack_irq_end
bic r0, r0, #0x1f
orr r1, r0, #0x11
msr cpsr_cxsf, r1
ldr sp, _stack_fiq_end
bic r0, r0, #0x1f
orr r1, r0, #0x1f
msr cpsr_cxsf, r1
ldr sp, _stack_usr_end
bic r0, r0, #0x1f
orr r1, r0, #0x13
msr cpsr_cxsf, r1
ldr sp, _stack_srv_end
/* Copy data section */
ldr r0, _data_start
ldr r1, _data_shadow_start
ldr r2, _data_shadow_end
sub r2, r2, r1
bl memcpy
/* Clear bss section */
ldr r0, _bss_start
ldr r2, _bss_end
sub r2, r2, r0
mov r1, #0
bl memset
/* Call _main */
ldr r1, =_main
mov pc, r1
_main:
mov r0, #1;
mov r1, #0;
bl boot_main
b _main
// .global return_to_fel
//return_to_fel:
// mov r0, #0x4
// mov r1, #'e'
// strb r1, [r0, #0]
// mov r1, #'G'
// strb r1, [r0, #1]
// mov r1, #'O'
// strb r1, [r0, #2]
// mov r1, #'N'
// strb r1, [r0, #3]
// mov r1, #'.'
// strb r1, [r0, #4]
// mov r1, #'F'
// strb r1, [r0, #5]
// mov r1, #'E'
// strb r1, [r0, #6]
// mov r1, #'L'
// strb r1, [r0, #7]
// ldr r0, =0x00000040
// ldr sp, [r0, #0]
// ldr lr, [r0, #4]
// ldr r1, [r0, #16]
// mcr p15, 0, r1, c1, c0, 0
// ldr r1, [r0, #12]
// mcr p15, 0, r1, c1, c0, 0
// ldr r1, [r0, #8]
// msr cpsr, r1
// bx lr
/*
* Exception handlers
*/
.align 5
undefined_instruction:
b .
.align 5
software_interrupt:
b .
.align 5
prefetch_abort:
b .
.align 5
data_abort:
b .
.align 5
not_used:
b .
.align 5
irq:
ldr sp, _stack_irq_end
sub sp, sp, #72
stmia sp, {r0 - r12}
add r8, sp, #60
stmdb r8, {sp, lr}^
str lr, [r8, #0]
mrs r6, spsr
str r6, [r8, #4]
str r0, [r8, #8]
mov r0, sp
bl arm32_do_irq
ldmia sp, {r0 - lr}^
mov r0, r0
ldr lr, [sp, #60]
add sp, sp, #72
subs pc, lr, #4
.align 5
fiq:
ldr sp, _stack_irq_end
sub sp, sp, #72
stmia sp, {r0 - r12}
add r8, sp, #60
stmdb r8, {sp, lr}^
str lr, [r8, #0]
mrs r6, spsr
str r6, [r8, #4]
str r0, [r8, #8]
mov r0, sp
bl arm32_do_fiq
ldmia sp, {r0 - lr}^
mov r0, r0
ldr lr, [sp, #60]
add sp, sp, #72
subs pc, lr, #4
/*
* The location of section
*/
.align 4
//_image_start:
// .long __image_start
//_image_end:
// .long __image_end
_data_shadow_start:
.long __data_shadow_start
_data_shadow_end:
.long __data_shadow_end
_data_start:
.long __data_start
_data_end:
.long __data_end
_bss_start:
.long __bss_start
_bss_end:
.long __bss_end
_stack_usr_end:
.long __stack_usr_end
_stack_und_end:
.long __stack_und_end
_stack_abt_end:
.long __stack_abt_end
_stack_irq_end:
.long __stack_irq_end
_stack_fiq_end:
.long __stack_fiq_end
_stack_srv_end:
.long __stack_srv_end
可以跳到main()函数执行,但是下面的代码只能输出abc, 却没人办法输出test2134就死掉了
int main(int argc, char **argv) {
sys_uart_init();
sys_uart_putc('a');
sys_uart_putc('b');
sys_uart_putc('c');
// sys_mmu_init();
printf("test2134");
while(1);
return 0;
}
所用LD文件如下
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
STACK_USR_SIZE = 0x10000; /* 40k */
STACK_UND_SIZE = 0x10000;
STACK_ABT_SIZE = 0x10000;
STACK_IRQ_SIZE = 0x10000;
STACK_FIQ_SIZE = 0x10000;
STACK_SRV_SIZE = 0x10000; /* 160k */
MEMORY
{
/*
ram : org = 0x80000000, len = 8M
dma : org = 0x80800000, len = 8M
heap : org = 0x81000000, len = 16M
*/
ram : org = 0x80000100, len = 800K
dma : org = 0x80800000, len = 2M
heap : org = 0x80c00000, len = 2M
stack : org = 0x81000000, len = 1M
}
SECTIONS
{
/*
.bootloader :
{
PROVIDE(__bootloader_start = .);
PROVIDE(__image_start = .);
PROVIDE(__text_start = .);
Objects\start.o (.text)
Objects\memcpy.o (.text)
Objects\memset.o (.text)
Objects\sys-uart.o (.text)
Objects\sys-clock.o (.text)
Objects\sys-dram.o (.text)
Objects\sys-mmu.o (.text)
Objects\sys-spi-flash.o (.text)
Objects\sys-copyself.o (.text)
PROVIDE(__bootloader_end = .);
} > ram
__bootloader_size = SIZEOF(.bootloader);
*/
.text :
{
/*Objects\main.o (.text)*/
*(.text)
*(.text*)
*(.init.text)
*(.exit.text)
*(.glue*)
*(.note.gnu.build-id)
PROVIDE(__text_end = .);
} > ram
.initcall ALIGN(8) :
{
PROVIDE(__initcall_start = .);
KEEP(*(.initcall_0.text))
KEEP(*(.initcall_1.text))
KEEP(*(.initcall_2.text))
KEEP(*(.initcall_3.text))
KEEP(*(.initcall_4.text))
KEEP(*(.initcall_5.text))
KEEP(*(.initcall_6.text))
KEEP(*(.initcall_7.text))
KEEP(*(.initcall_8.text))
KEEP(*(.initcall_9.text))
PROVIDE(__initcall_end = .);
} > ram
.exitcall ALIGN(8) :
{
PROVIDE(__exitcall_start = .);
KEEP(*(.exitcall_9.text))
KEEP(*(.exitcall_8.text))
KEEP(*(.exitcall_7.text))
KEEP(*(.exitcall_6.text))
KEEP(*(.exitcall_5.text))
KEEP(*(.exitcall_4.text))
KEEP(*(.exitcall_3.text))
KEEP(*(.exitcall_2.text))
KEEP(*(.exitcall_1.text))
KEEP(*(.exitcall_0.text))
PROVIDE(__exitcall_end = .);
} > ram
.ksymtab ALIGN(8) :
{
PROVIDE(__ksymtab_start = .);
KEEP(*(.ksymtab.text))
PROVIDE(__ksymtab_end = .);
} > ram
.romdisk ALIGN(8) :
{
PROVIDE(__romdisk_start = .);
KEEP(*(.romdisk))
PROVIDE(__romdisk_end = .);
} > ram
.rodata ALIGN(8) :
{
PROVIDE(__rodata_start = .);
*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
PROVIDE(__rodata_end = .);
} > ram
.data_shadow ALIGN(8) :
{
PROVIDE(__data_shadow_start = .);
PROVIDE(__data_shadow_end = (. + SIZEOF(.data)));
PROVIDE(__image_end = __data_shadow_end);
} > ram
.data : AT(ADDR(.data_shadow))
{
PROVIDE(__data_start = .);
*(.data*)
. = ALIGN(8);
PROVIDE(__data_end = .);
} > ram
.ARM.exidx ALIGN(8) :
{
PROVIDE (__exidx_start = .);
*(.ARM.exidx*)
PROVIDE (__exidx_end = .);
} > ram
.ARM.extab ALIGN(8) :
{
PROVIDE (__extab_start = .);
*(.ARM.extab*)
PROVIDE (__extab_end = .);
} > ram
.bss ALIGN(8) (NOLOAD) :
{
PROVIDE(__bss_start = .);
*(.bss*)
*(.sbss*)
*(COMMON)
. = ALIGN(8);
PROVIDE(__bss_end = .);
} > ram
.stack ALIGN(8) (NOLOAD) :
{
PROVIDE(__stack_start = ORIGIN(stack));
PROVIDE(__stack_usr_start = __stack_start);
PROVIDE(__stack_usr_end = __stack_start + STACK_USR_SIZE);
PROVIDE(__stack_und_start = __stack_usr_end);
PROVIDE(__stack_und_end = __stack_usr_end + STACK_UND_SIZE);
. = ALIGN(8);
PROVIDE(__stack_abt_start = __stack_und_end);
PROVIDE(__stack_abt_end = __stack_und_end + STACK_ABT_SIZE);
. = ALIGN(8);
PROVIDE(__stack_irq_start = __stack_abt_end);
PROVIDE(__stack_irq_end = __stack_abt_end + STACK_IRQ_SIZE);
. = ALIGN(8);
PROVIDE(__stack_fiq_start = __stack_irq_end);
PROVIDE(__stack_fiq_end = __stack_irq_end + STACK_FIQ_SIZE);
. = ALIGN(8);
PROVIDE(__stack_srv_start = __stack_fiq_end);
PROVIDE(__stack_srv_end = __stack_fiq_end + STACK_SRV_SIZE);
. = ALIGN(8);
PROVIDE(__stack_end = __stack_srv_end);
} > stack
.dma ALIGN(8) (NOLOAD) :
{
PROVIDE(__dma_start = ORIGIN(dma));
PROVIDE(__dma_end = ORIGIN(dma) + LENGTH(dma));
} > dma
.heap ALIGN(8) (NOLOAD) :
{
PROVIDE(__heap_start = ORIGIN(heap));
PROVIDE(__heap_end = ORIGIN(heap) + LENGTH(heap));
} > heap
.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) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_info 0 : { *(.debug_info) }
.debug_line 0 : { *(.debug_line) }
.debug_pubnames 0 : { *(.debug_pubnames) }
.debug_aranges 0 : { *(.debug_aranges) }
}
@司徒
EPM240不支持内嵌逻辑分析仪,如果只是想UARTl输出,可以用下面这个现成的代码。前端打两拍或三拍采一下,用FIFO更好,时钟要用屏的时钟,不要用板载的。
https://opencores.org/projects/uart16550
Sigma真正的开发社区是 https://we.comake.online/ 那里资源很多。
https://whycan.com/files/members/383/QQ截图20210402212043.jpg
是的,也不知道他为啥搞个论坛,又搞个微信社区,活跃的还是这个微信社区。
shawn.d 说:kekemuyu 说:我可以很明确的告诉你,这个开源工程有很多问题,你烧录一下自己编译的就知道了,当然你直接下载他的镜像烧录是OK的,而且我跟作者联系过,我基本断定它并不是真的开源.掌机谈开源就是个笑话,想玩还是自己撸比猜别人的更简单.
是吗?这倒是没注意,是不是版本不对,他wiki里写的“Note: The source codes availables are only for Bittboy v3 or less. For Bittboy v3.5 or PocketGo the source code is not confirmed that will work yet.”
开源的游戏系统也不能说完全没有,RetroPie应该是完全开源的。
我就是用的V3.5, 烧他们的固件是可以的,你可以先编译试试,RetroPie是树莓派那个吗?我去瞧瞧.
qllbee 说:我说错了 这个是横版的,确实一直更新, 竖版的需要刷机或者改机再刷 司徒的是竖版的老版本
我这不还没刷吗 需要先备份然后先折腾折腾原版系统....然而编程器不给力...
我的这个是最早版本的 得改机那种所有版本都有的https://github.com/TriForceX/MiyooCFW
https://whycan.com/files/members/1315/2021-02-02145308.png
我可以很明确的告诉你,这个开源工程有很多问题,你烧录一下自己编译的就知道了,当然你直接下载他的镜像烧录是OK的,而且我跟作者联系过,我基本断定它并不是真的开源.掌机谈开源就是个笑话,想玩还是自己撸比猜别人的更简单.
小伙伴们SigmaStar有自己的社区了, http://dev.comake.online/,官方的. 来晕哥地盘发广告,不知违不违规,如有违规请删帖,谢谢!
链接: https://pan.baidu.com/s/1T2IkIf9Fb7xlxcHsclb61Q 提取码: jx2n
基本上也就source目录下的那几个包有点用,其它的都是什么centos的系统,ubuntu的系统,虚拟机等等。
晕哥,我的板上没有SD卡,在运行这个USB启动时,启动后会一直报SD卡电压不匹配错误的,当然U盘也是没有挂载出来的,怎么改掉这个?
[ 170.491581] sunxi-mmc 1c10000.mmc: no support for card's volts
[ 170.497432] mmc1: error -22 whilst initialising SDIO card
[ 171.611596] sunxi-mmc 1c10000.mmc: no support for card's volts
[ 171.617446] mmc1: error -22 whilst initialising SDIO card
[ 172.731593] sunxi-mmc 1c10000.mmc: no support for card's volts
[ 172.737444] mmc1: error -22 whilst initialising SDIO card
[ 173.851581] sunxi-mmc 1c10000.mmc: no support for card's volts
[ 173.857430] mmc1: error -22 whilst initialising SDIO card
[ 174.971636] sunxi-mmc 1c10000.mmc: no support for card's volts
[ 174.977485] mmc1: error -22 whilst initialising SDIO card
[ 176.091583] sunxi-mmc 1c10000.mmc: no support for card's volts
[ 176.097434] mmc1: error -22 whilst initialising SDIO card
[ 177.211597] sunxi-mmc 1c10000.mmc: no support for card's volts
[ 177.217448] mmc1: error -22 whilst initialising SDIO card
[ 178.331633] sunxi-mmc 1c10000.mmc: no support for card's volts
[ 178.337484] mmc1: error -22 whilst initialising SDIO card
[ 179.451586] sunxi-mmc 1c10000.mmc: no support for card's volts
[ 179.457436] mmc1: error -22 whilst initialising SDIO card
[ 180.571627] sunxi-mmc 1c10000.mmc: no support for card's volts
[ 180.577478] mmc1: error -22 whilst initialising SDIO card
[ 181.691623] sunxi-mmc 1c10000.mmc: no support for card's volts
[ 181.697476] mmc1: error -22 whilst initialising SDIO card
Some SoCs can also boot from SPI NAND flash. Here the BROM tries to read a valid first stage bootloader starting from page number 0, 32, 64, 96, 128, 160, 192 and 224. It only reads the first 1024 bytes from every page. Since it simply sends the standard SPI NAND flash commands, it is a good idea to use a flash with ECC turned on by default and is performed by the flash itself, since errors cannot otherwise be corrected.
社区很早就写着了只是不明显。
https://linux-sunxi.org/Bootable_SPI_flash
谢谢
页次: 1