开始基于at91sam9261ek 的uboot的编译与运行。atmel 提供了移植好的uboot供参考,这样,简单的修改,就可以让uboot跑起来。
开发环境,VMware虚拟机+WIN10 64位。虚拟机安装ubuntu 18.04,开启samba共享。
一、代码下载与编译
1、git clone代码,并切换到最新的分支
git clone git://github.com/linux4sam/u-boot-at91.git (如果太慢,可以使用gitee的同步地址)
git clone https://gitee.com/fsmd/u-boot-at91.git
可以切换到最新的分支:
git branch -r
git checkout origin/u-boot-2020.01-at91 -b u-boot-2020.01-at91
2、make config
make mrproper
make at91sam9261ek_nandflash_defconfig make
如果有错误提示,安装ubuntu 的组件包
/bin/sh: bison: command not found
ubuntu安装 bison
sudo apt-get install bison
/bin/sh: flex: command not found
ubuntu 安装 flex
sudo apt-get install flex
提示以下,说明可以配置了
LEX scripts/kconfig/zconf.lex.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
make menuconfig
这里可以使用默认的配置即可,后面,发现问题,再修改优化。
3、make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
编译后,会生成u-boot.bin文件,可以用于uboot烧写
二、烧写与运行
这里使用J-Link烧写,当然,也可以用USB烧写。
1、打开SAM-BA v2.18,连接上开发板。
2、使能NandFlash,这里采用nandflash启动的方式
3、设置uboot的烧写地址,这个地址,来自bootstrap的配置。
4、烧写完后,可以重新上电运行,看下打印信息。
RomBOOT
AT91Bootstrap 3.10.0 (2020-10-05 10:49:00)
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
NAND: Done to load image
U-Boot 2020.01-linux4sam-2020.04-rc2-00001-gf33fcc447c-dirty (Oct 06 2020 - 20:43:30 +0800)
CPU: AT91SAM9261
Crystal frequency: 18.432 MHz
CPU clock : 198.656 MHz
Master clock : 99.328 MHz
DRAM: 64 MiB
NAND: 128 MiB
Loading Environment from NAND... *** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: dm9000
Error: dm9000 address not set.
dm9000 i/o: 0x30000000, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:00:00:00:00:00
WARNING: Bad MAC address (uninitialized EEPROM?)
could not establish link
Hit any key to stop autoboot: 0
U-Boot>
U-Boot>
5、uboot是初步工作了,但它的目的是bootloader,也就是引导Linux内核的启动,或是烧写用。所以,后面根据内核配置的文件系统,需要进一步的修改,才能更好的使用。传递启动参数给内核。
三、总结:
这里NandFlash大小正确的识别了,就不用再配置NandFlash型号了。接下来需要把Linux内核编译后烧写进去,从而一步步进展。