1.首先进入嵌入式领域是通过stm32,算是入门机的嵌入式的硬件;接着接触了一些实时操作系统,当然linux早些时间都有接触过,但都只知道是什么,不知道究竟能干什么?所以刚踏入工作,之余,为了不消极kill time,也算进一步窥探嵌入式世界里究竟是是什么东西在吸引着无数的人,继续写博客记录一些学习历程和小想法。对于别人想要查阅信息以得到自己的标准答案,在这里大概率是行不通的

2.废话不多说,现在进入正题。什么是嵌入式linux的基本内容:bootloader,内核,驱动,文件系统;当然还有基础中基础:裸机。现在先接触裸机,学习的机子是jz2440

3.点亮led:3.1看原理图找引脚,配置输入输出模式,设置输入输出值

//led.c
#define
GPFCON (*(volatile unsigned long *)0x56000050) #define GPFDAT (*(volatile unsigned long *)0x56000054) int main() { GPDCON = 0x00000100; //bit[9:8] = 0b01为输出模式 GPDAT = 0x00000000; //bit[4] = 0b0输出低电平点亮led return 0 ; }

3.2启动文件

@startup.s
.text .
global _start _start : ldr r0, = 0x53000000 @watchdog寄存器地址 mov r1, #0x0 str r1, [r0] @写0禁止watchdog,否则会不断重启 ldr sp, =1024*4 @设置堆栈,根据ARM的ATPCS规则,对栈的操作属于FD(满递减),即栈指针一直指向栈顶元素,是按地址减小的方向增长的,所以一般将SP设置在地址的最高处。 bl main halt_loop: b halt_loop

3.3.Makefile

led.bin : startup.S  led.c
    arm-linux-gcc -g -c -o startup.o startup.S               #-c只是不做连接
    arm-linux-gcc -g -c -o led.o led.c
    arm-linux-ld -Ttext 0x0000000 -g  startup.o led.o -o led_elf   #代码段地址及内容,由于没有定义数据段,bss段,所以他们被依次放在代码段后面
    arm-linux-objcopy -O binary -S led_elf led.bin           #将文件从elf格式转换成bin格式
    arm-linux-objdump -D -m arm  led_elf > led.dis           #将elf文件转换成反汇编文件
clean:
    rm -f led_on_c.dis led_on_c.bin led_on_c_elf *.o

 

posted on 2019-03-10 13:50  lzd626  阅读(195)  评论(0编辑  收藏  举报