-BL1启动实验之点亮第一个LED(裸机)
时间:10-02
整理:3721RD
点击:
因为小编第一次用TI的板子 作为新手表示很不淡定,所以只能从裸机上来了解 arm 335x 的使用。不过在开发过程中,裸机上的开发是没用的。本次学习内容如下:
1.linux下的基础指令(百度一下很多)
2.makefile命令《参见:跟我一起学Makefile.pdf》
3.大概了解汇编语言(了解了其中的30种,当然估计果断时间就忘记了,不过应该能记住一点,具体的百度一下)
4.交叉编译链(toolchains)的必要性,以及如何安装交叉编译工具链及配置linux环境(用户目录下的.bashrc/ export $PATH=/XXXX:$PAHT)。
5.u-boot 的工作机制,以及如何使用mkimage 生成MLO(MLO其实是TI给u-boot的SPL起了个别名而已,我们称之为BL1,MLO其实是mkimage工具给u-boot-spl.bin添加了头信息后得到的(就行uImage和zImage的关系)。BL2自然就是U-boot.bin了,但是MLO不是直接加载U-boot.bin文件,而是加载u-boot.img文件,img文件其实是用mkimage工具给u-boot.bin添加头信息后得到的)
// 好现在开始上代码。
开发板上:USER_LED:GPIO3_16;高电平使三极管导通。LED 亮
1.makefile:
- led.bin: led.o //目标 &&依赖
- arm-linux-gnueabihf-ld -Ttext 0x00000000 -o led.elf $^ //只编辑不链接
- arm-linux-gnueabihf-objcopy -O binary led.elf led.bin //生成linux下的可执行文件 elf及.bin
- mkimage -T omapimage -a 0x402F0400 -d led.bin //335x 的uboot中,启动只认识image文件
- //0x402f0400 是SRAM的地址
- %.o : %.s
- arm-linux-gnueabihf-gcc -o $@ [ DISCUZ_CODE_172 ]lt; -c
- %.o : %.c
- arm-linux-gnueabihf-gcc -o $@ [ DISCUZ_CODE_172 ]lt; -c
- clean:
- rm *.o *.elf *.bin *.dis MLO -f
start.s
- /*
- .global _start
- _start:
- bl led_flash
- b .
- */
- .global _start
- _start:
- ldr r0, =0x44E10998 // GPIO3_16 CONFING
- ldr r1, =0x0000001F
- str r1, [r0]
- ldr r0, =0x481AE134 //GPIO3_16 OE
- ldr r1, =0x00000000
- str r1, [r0]
- ldr r0, =0x481AE13C //GPIO3_16 DATAOUT
- ldr r1, =0x00010000
- str r1, [r0]
- flag:
- b flag //死循环 防止程序跑飞
led.c:
- #define led_conf 0x44E10998
- #define led_oe 0x481AE134
- #define led_data 0x481AE13C
- void delay(void);
- void led_flash(void)
- {
- unsigned int *p = (unsigned int *)led_conf;
- *p = 0x0000001f;
- unsigned int *p1 = (unsigned int *)led_oe;
- *p1 = 0x00000000;
- unsigned int *p2 = (unsigned int *)led_data;
- while(1)
- {
- *p2 = 0x00010000;
- delay();
- *p2 = 0x00000000;
- delay();
- }
- }
- void delay(void)
- {
- unsigned int i = 100000;
- while(i--);
- }
因为是初学所以没用现成的函数配置。顺便了解下了 uboot工作方式,而下面小编将对wiki进行解读,下面将脱离裸机部分,进行实战开发,请大家期待
