本文脉络:
1、SAM9260处理器介绍,单板机配置。
2、SAM-BA的运行机制与applets的修改。
3、修改bootstrap。
4、内核源码获取与打补丁。
5、基于ubuntu的开发环境搭建。
6、内核配置与编译。
7、根文件系统镜像制作,busybox编译与安装。
8、上电,运行内核。
9、第一个app。
10、第一个驱动模块。
enjoy it!
内容将在近期更新!
1、SAM9260处理器介绍,单板机配置。
处理器介绍嘛,嗯,贴一下atmel官方参数吧:
Flash (Kbytes): 0 Kbytes
Pin Count:217
Max. Operating Freq. (MHz):210 MHz
CPU:ARM926
Max I/O Pins:96
Ext Interrupts:96
USB Transceiver:3
USB Speed:Full Speed
USB Interface:Host, Device
SPI:2
TWI (I2C):1
UART:7
SSC:1
Ethernet:1
SD / eMMC:1
Graphic LCD:No
Video Decoder:No
Camera Interface:Yes
ADC Channels:4
ADC Resolution (bits):10
ADC Speed (ksps):312
Resistive Touch Screen:No
DAC Channels:0
DAC Resolution (bits):0
Temp. Sensor:No
Crypto Engine:No
SRAM (Kbytes):8
EEPROM (Bytes):0
Self Program Memory:NO
External Bus Interface:1
DRAM Memory:sdram
NAND Interface:Yes
picoPower:No
Temp. Range (deg C):-40 to 85
I/O Supply Class:1.8/3.3
FPU:No
MPU / MMU:No / Yes
Timers:6
Output Compare Channels:6
Input Capture Channels:6
PWM Channels:0
32kHz RTC:Yes
Calibrated RC Oscillator:No
我使用的单板机是公司计量终端部门用的,配置16MiB SDRAM,128MiB NAND,配置是low了点,不过运行linux还好。
2、SAM-BA的运行机制与applets的修改。
sam-ba的运行机制是这样的:9260 cpu上电之后,内置的boot程序将会从以下地方寻找可执行代码:spi-flash,iic-eeprom,nand,如果都没有,那么boot程序将会挂起,等待上位机sam-ba发送的命令,boot与sam-ba连接之后,将会相互配合下载小程序到9260 cpu的内置2*4KiBsram中并执行,这个小程序就是applet。applet可以做很多事情:配置系统时钟,配置sdram,配置nand接口,将文件烧写到nand上。
我使用的sam-ba是从官网down的当前最新版2.15,windows版本。
windows下编译applet需要几个工具:1 Sourcery CodeBench。2 Coreutils windows版。3 make工具 windows版。这几个工具都是免安装的,不过需要配置环境变量指向这些路径,会用linux的人应该都知道怎么配置。
安装好sam-ba后,9260对应的applet在这个路径下:Program Files\Atmel\sam-ba_2.15\applets\legacy\sam-ba_applets,在这个路径下,首先发现的应该是Makefile文件,里边内容有点多,删减一下,像这样:
all: extram_applet lowlevelinit_applet nandflash_applet
extram_applet:
(cd extram && $(MAKE) BOARD=at91sam9260-ek CHIP=at91sam9260 MEMORIES=sram -f Makefile clean all)
lowlevelinit_applet:
(cd lowlevelinit && $(MAKE) BOARD=at91sam9260-ek CHIP=at91sam9260 MEMORIES=sram -f Makefile clean all)
nandflash_applet:
(cd nandflash && $(MAKE) BOARD=at91sam9260-ek CHIP=at91sam9260 MEMORIES=sdram -f Makefile clean all)
修改库路径下的源文件:Program Files\Atmel\sam-ba_2.15\applets\legacy\at91lib\boards\at91sam9260-ek\board_memories.c 和board.h。board.h主要修改IO的与单板的对应,SDRAM位宽,大小等。
board_memories.c主要是修改sdram控制器的寄存器和nand接口的寄存器,对应这两个函数BOARD_ConfigureSdram48MHz,BOARD_ConfigureNandFlash48MHz。
我使用的板子配置如下:
(SDRAM 16MiB,16bit)
WRITE(AT91C_BASE_SDRAMC, SDRAMC_CR, AT91C_SDRAMC_NC_9
| AT91C_SDRAMC_NR_13
| AT91C_SDRAMC_CAS_2
| AT91C_SDRAMC_NB_4_BANKS
| sdrc_dbw
| AT91C_SDRAMC_TWR_1
| AT91C_SDRAMC_TRC_4
| AT91C_SDRAMC_TRP_1
| AT91C_SDRAMC_TRCD_1
| AT91C_SDRAMC_TRAS_2
| AT91C_SDRAMC_TXSR_3);
(NAND 128MiB 8bit)
AT91C_BASE_SMC->SMC_SETUP0 = 0x00000001;
AT91C_BASE_SMC->SMC_PULSE0 = 0x07070703;
AT91C_BASE_SMC->SMC_CYCLE0 = 0x00070007;
AT91C_BASE_SMC->SMC_CTRL0 = (AT91C_SMC_READMODE
| AT91C_SMC_WRITEMODE
| AT91C_SMC_NWAITM_NWAIT_DISABLE
| ((0x1 << 16) & AT91C_SMC_TDF));
修改applet源文件:Program Files\Atmel\sam-ba_2.15\applets\legacy\sam-ba_applets
lowlevelinit\main.c
extram\main.c
nandflash\main.c
修改好后就可以编译了,在cmd 下 切换到 Program Files\Atmel\sam-ba_2.15\applets\legacy\sam-ba_applets 然后 make all,这样applet就完成了。
最后,修改下脚本文件Program Files\Atmel\sam-ba_2.15\tcl_lib\at91sam9260-ek\at91sam9260-ek.tcl 将其中SDRAM位宽更改为16bit。
最后的最后,用TTL串口连接板子的调试串口与电脑,打开sam-ba,板子选择at91sam9260-ek,连接成功。
3、修改bootstrap。
针对9260mpu,atmel官方分别提供了mdk、iar、gcc下的工程代码,这样,需要做的事情就很少了,本人使用的是mdk的工程,修改的地方与applet大体相似,board.h、board_memories.c(nand、sdram)、board_lowlevel.c(时钟配置),然后在工程的target options 中的define中填入这些:at91sam9260,ORIGIN_nandflash,DESTINATION_sdram,OP_BOOTSTRAP_on,FROM_ADDR=0x40000,DEST_ADDR=0x20020000,BIN_SIZE=0x400000,TRACE_LEVEL意思是bootstrap将会从nand的0x40000处拷贝代码到SDRAM的0x20020000处,总共拷贝0x400000字节,完成后跳转到0x20020000地址。修改完后编译,备用。
4、内核源码获取与打补丁。
内核下载链接:https://www.kernel.org/
针对atmel处理器的补丁下载链接:http://maxim.org.za/at91_26.html
在ubuntu下使用patch命令对内核打补丁。
5、基于ubuntu的开发环境搭建。
从friendlyarm网站下载arm-linux-gcc-4.3.2,解压(务必在linux环境下)后得到可执行文件,cp命令将其移动到/usr/local/arm/下,当然,这需要管理员权限。
编辑/etc/environment文件,在PATH="...."末尾加上:/usr/local/arm/4.3.2/bin,然后source一下environment文件,完成。终端中输入:arm-linux-gcc -v 显示其版本号等信息。
要用menuconfig的话还要安装一个库,命令如下:sudo apt-get install libncurses5-dev
6、内核配置与编译。
这个,太多了,我主要更改的地方是nand分区的源码以及sdram控制器的配置,分区是这样的:
0x0CC40000
80M user
0x03640000
32M root
0x00440000
4M kernel
0x00040000
256K bootloader
0x00000000
menuconfig中配置支持jffs2文件系统、开启EABI支持、bootargs设置为:mem=16M console=ttyS0,115200 root=/dev/mtdblock2 rootfs=jffs2 rw
之后make ARCH=arm CROSS_COMPILE=arm-linux- zImage,等待吧~
7、根文件系统镜像制作,busybox编译与安装。
busybox官方网站:www.busybox.net
本人使用的是1.9.2版本,menuconfig里没什么好配置的,