【AT91SAM9261EK】 编译并烧写AT91Bootstrap 3.10.4
原创
©著作权归作者所有:来自51CTO博客作者51CTO_zhangsz的原创作品,请联系作者获取转载授权,否则将追究法律责任
前言
- 有几块老板子,之前可以跑Linux的,最近翻了出来,看看能不能【老当益壮】,巩固一下Linux开发知识
- AT91SAM9261EK 这个开发板,已经两年多没有动了,今天上电方向,LCD屏还能亮,说明基本完好无损,所以,开干
环境搭建
- 基于ARM的嵌入式Linux开发环境,已经搭建过很多次了,有现成的环境
- AT91SAM9261EK 开发板的资料越来越少了,硬盘里与网盘上搜了下,最后从官网:Atmel -> https://www.microchip.com/,找到了开发板的原理图,找到了AT91SAM9261这个芯片的数据手册
- 原理图,是嵌入式开发必备的
- 软件先从最基本的boot开始,AT91SAM9261没有直接使用Uboot,官方有个AT91Bootstrap,算是uboot的引导程序,先把这个AT91Bootstrap 跑起来,环境准备好,再跳转到uboot执行
AT91Bootstrap
配置与编译
- 可以直接使用默认的配置,这里使用nandflash启动
- 进入:
at91bootstrap/board/at91sam9261ek
目录,可以看到支持的默认的配置
- 这里使用nandflash
at91sam9261eknf_uboot_defconfig
的配置 - shell 命令如下
root@pluto-os:/home/linux/at91/at91bootstrap# make mrproper
CLEAN obj and misc files!
CLEAN configuration files!
CLEAN binary files!
root@pluto-os:/home/linux/at91/at91bootstrap# make at91sam9261eknf_uboot_defconfig
#
# configuration written to .config
#
#
# make dependencies written to .auto.deps
# See top of this file before playing with this auto-preprequisites!
#
- 编译
- 命令:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
root@pluto-os:/home/linux/at91/at91bootstrap# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
CC
========
arm-linux-gnueabi-gcc 9
as FLAGS
========
-g -Os -Wall -Iboard/at91sam9261ek -Iinclude -Icontrib/include -DJUMP_ADDR=0x21F00000 -DTOP_OF_MEMORY=0x328000 -DMACH_TYPE=0x350 -DLINK_ADDR="0x300000" -Dat91sam9261ek -DMACH_TYPE=0x350 -DTOP_OF_MEMORY=0x328000 -DCRYSTAL_18_432MHZ -DCONFIG_AT91SAM9261 -mcpu=arm926ej-s -mtune=arm926ej-s -mfloat-abi=soft -DCONFIG_THUMB -mthumb-interwork -DCONFIG_AT91SAM9261EK -DCONFIG_PMC_COMMON
gcc FLAGS
=========
-nostdinc -isystem "/usr/lib/gcc-cross/arm-linux-gnueabi/9/include" -ffunction-sections -g -Os -Wall -mno-unaligned-access -fno-stack-protector -fno-common -fno-builtin -fno-jump-tables -fno-pie -Iboard/at91sam9261ek -Icontrib/include -Iinclude -Ifs/include -Iconfig/at91bootstrap-config -DAT91BOOTSTRAP_VERSION=\"3.10.4-00001-g4a8de59c-dirty\" -DCOMPILE_TIME="\"2022-04-27 00:50:53\"" -DIMG_ADDRESS=0x00040000 -DIMG_SIZE=0x000a0000 -DJUMP_ADDR=0x21F00000 -DOF_OFFSET= -DOF_ADDRESS= -DMEM_BANK=0x20000000 -DIMAGE_NAME="\"\"" -DCMDLINE="\"\"" -DCMDLINE_FILE="\"\"" -DTOP_OF_MEMORY=0x328000 -DMACH_TYPE=0x350 -DMEM_SIZE=0x20000000 -DCONFIG_DEBUG -DBANNER="""\"\\n\\nAT91Bootstrap \" AT91BOOTSTRAP_VERSION \" (\" COMPILE_TIME \")\\n\\n\"""" -DCONFIG_HW_DISPLAY_BANNER -DCONFIG_HW_INIT -Dat91sam9261ek -DMACH_TYPE=0x350 -DTOP_OF_MEMORY=0x328000 -DCRYSTAL_18_432MHZ -DCONFIG_AT91SAM9261 -mcpu=arm926ej-s -mtune=arm926ej-s -mfloat-abi=soft -DCONFIG_THUMB -mthumb -mthumb-interwork -DCONFIG_CRYSTAL_18_432MHZ -DCONFIG_CPU_CLK_200MHZ -DCONFIG_BUS_SPEED_100MHZ -DCONFIG_AT91SAM9261EK -DCONFIG_SDRAM -DCONFIG_RAM_512MB -DCONFIG_NANDFLASH -DCONFIG_ENABLE_SW_ECC -DCONFIG_NANDFLASH_RECOVERY -DCONFIG_PMC_COMMON -DCONFIG_PMC_V1 -DCONFIG_PMC_PERIPH_CLK_AT91SAM9 -DCONFIG_PMC_PLL_CLK -DCONFIG_PMC_MCK_CLK -DCONFIG_ONFI_DETECT_SUPPORT -DCONFIG_USE_ON_DIE_ECC_SUPPORT -DBOOTSTRAP_DEBUG_LEVEL=DEBUG_INFO -DCONFIG_DISABLE_WATCHDOG -DCONFIG_USART -DCONFIG_RSTC
ld FLAGS
========
-Map=binaries/at91sam9261ek-nandflashboot-uboot-3.10.4.map --cref -static -T elf32-littlearm.lds --gc-sections -Ttext 0x300000
AS crt0_gnu.S
CC main.c
CC board/at91sam9261ek/at91sam9261ek.c
CC lib/string.c
CC lib/eabi_utils.c
CC lib/div.c
CC lib/consttime_memequal.c
CC driver/debug.c
CC driver/common.c
CC driver/at91_pio.c
CC driver/pmc/clk-common.c
CC driver/pmc/periph-clk-at91sam9.c
CC driver/pmc/pll-clk.c
CC driver/pmc/master-clk.c
CC driver/at91_pit.c
CC driver/at91_wdt.c
CC driver/at91_usart.c
CC driver/at91_rstc.c
CC driver/shdwc.c
CC driver/sdramc.c
CC driver/nandflash.c
CC driver/hamming.c
LD at91sam9261ek-nandflashboot-uboot-3.10.4.elf
Size of at91sam9261ek-nandflashboot-uboot-3.10.4.bin is 8356 bytes
[Succeeded] It's OK to fit into SRAM area
[Attention] The space left for stack is 14644 bytes
编译产物
- 进入
binaries
目录, - 这里编译的产物就是:
at91sam9261ek-nandflashboot-uboot-3.10.4.bin
烧写运行
- 使用samba v2.18 + J-link V8烧写
- 烧写前先初始化nandflash,并且可以erase 一下
小插曲
- 我这个AT91SAM9261KE开发板,被【阉割】了NandFlash,改为了128MB的,所以默认编译处出来的,提示NandFlash 无法找到
- 修改方法:添加 nandflash型号到:
at91bootstrap/driver/nandflash.c
- 添加NandFlash 型号:
-
static struct nand_chip nand_ids[]
最下面添加
/* Samsung K9F1G08U0A 128MB */
{0xecf1, 0x400, 0x20000, 0x800, 0x40, 0x0},
再次编译下载
[00:32:00.872]收←◆RomBOOT
[00:32:00.928]收←◆
AT91Bootstrap 3.10.4-00001-g4a8de59c (2022-04-27 00:21:44)
NAND: ONFI not supported
NAND: Manufacturer ID: 0xec Chip ID: 0xf1
NAND: Disable On-Die ECC
NAND: Press the recovery button (BP4) to recovery
NAND: Using Software ECC
NAND: Image: Copy 0xa0000 bytes from 0x40000 to 0x21f00000
[00:32:01.372]收←◆NAND: Done to load image
小结
- Atmel的芯片,还是比较的经典的,之前的质量还是【杠杆的】
- 搭建Linux的学习环境,学习新知识,加固旧知识
- 学以致用