前言

  • 有几块老板子,之前可以跑Linux的,最近翻了出来,看看能不能【老当益壮】,巩固一下Linux开发知识
  • AT91SAM9261EK 这个开发板,已经两年多没有动了,今天上电方向,LCD屏还能亮,说明基本完好无损,所以,开干

环境搭建

  • 基于ARM的嵌入式Linux开发环境,已经搭建过很多次了,有现成的环境
  • AT91SAM9261EK 开发板的资料越来越少了,硬盘里与网盘上搜了下,最后从官网:Atmel -> ​​https://www.microchip.com/​​,找到了开发板的原理图,找到了AT91SAM9261这个芯片的数据手册
  • 原理图,是嵌入式开发必备的
  • 软件先从最基本的boot开始,AT91SAM9261没有直接使用Uboot,官方有个AT91Bootstrap,算是uboot的引导程序,先把这个AT91Bootstrap 跑起来,环境准备好,再跳转到uboot执行

AT91Bootstrap

  • 参考官方的网站:​​https://www.linux4sam.org/bin/view/Linux4SAM/AT91Bootstrap​
  • 里面介绍的很详细,先把代码 git clone 下来
  • ​git clone https://github.com/linux4sam/at91bootstrap.git​
  • 由于最新的master分支,已经找不到这个【遗产级别】的开发板,所以切换到老的分支,我切换到:
    AT91Bootstrap ​​​ at91bootstrap-3.x​​ 分支

配置与编译

  • 可以直接使用默认的配置,这里使用nandflash启动
  • 进入:​​at91bootstrap/board/at91sam9261ek​​目录,可以看到支持的默认的配置

【AT91SAM9261EK】 编译并烧写AT91Bootstrap 3.10.4_AT91

  • 这里使用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 一下

【AT91SAM9261EK】 编译并烧写AT91Bootstrap 3.10.4_bootstrap_02

  • 运行信息:这里需要接上串口(DEBUG调试串口)

【AT91SAM9261EK】 编译并烧写AT91Bootstrap 3.10.4_bootstrap_03

小插曲

  • 我这个AT91SAM9261KE开发板,被【阉割】了NandFlash,改为了128MB的,所以默认编译处出来的,提示NandFlash 无法找到
  • 修改方法:添加 nandflash型号到:​​at91bootstrap/driver/nandflash.c​
  • 【AT91SAM9261EK】 编译并烧写AT91Bootstrap 3.10.4_AT91_04


  • 添加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

【AT91SAM9261EK】 编译并烧写AT91Bootstrap 3.10.4_linux_05

小结

  • Atmel的芯片,还是比较的经典的,之前的质量还是【杠杆的】
  • 搭建Linux的学习环境,学习新知识,加固旧知识
  • 学以致用