单片机
返回首页

AT91SAM9260搭建LINUX操作系统

2022-07-07 来源:csdn

一、编写目的

        本文档用于记录AT91SAM9260 LINUX学习的过程。使用以前开发过的一个9260核心板进行开发。该核心板参考ATMEL官方的AT91SAM9260-EK开发板设计,因此与官方开发板使用相同的BOOTLOADER、KERNEL。


        可从www.linux4sam.org或ftp://www.at91.com/pub/下载AT91SAM9260-EK开发板的软件支持包进行开发。后期ATMEL对此开发板没有单独进行维护了,相关软件源码都整合到最新的AT91源码中了,通过make去选择相应开发板。


        www.linux4sam.org有相应软件(bootstrap、uboot、内核)源码和相关的使用方法,本文档中的一些编译、安装方法都可能来源于此网站上的说明。


开发环境说明:CentOS 6.5(2.6.32) 、arm-linux-gcc 4.3.2


二、系统搭建

1. 下载相关软件包

        Ø sam-ba_2.12.zip (镜像烧录工具)


                此工具可从互联网上下载,从www.linux4sam.org下载需要注册。


                ( http://pan.baidu.com/s/1o6mHJfW )


        Ø at91bootstrap-at91bootstrap-3.x.zip


                https://github.com/linux4sam/at91bootstrap/tree/at91bootstrap-3.x


                (http://pan.baidu.com/s/1hq1NgeK)


        Ø u-boot-at91-u-boot-2013.07-at91.zip


                https://github.com/linux4sam/u-boot-at91/tree/u-boot-2013.07-at91


                (http://pan.baidu.com/s/1mgC4qwS)


        Ø linux-at91-linux-2.6.39-at91.zip


                https://github.com/linux4sam/linux-at91/tree/linux-2.6.39-at91


                (http://pan.baidu.com/s/1mgC4qwS)


 


2. Bootstrap编译

        根据bootstrap源码目录下的README.txt说明编译nand flash的镜像操作


        1) # make mrproper


        2) # make at91sam9260eknf_uboot_defconfig

        提示“Permission denied”错误,此错误一般是由于可执行文件没有执行权限导致的,给相关可执行文件赋予执行权限即可,或给该文件夹下所有文件都赋予可执行权限。


                # chmod +x * -R


        3) 增加64MB NAND的支持,gedit ./driver/nandflash.c

        4) # make menuconfig

        提示找不到安装ncurses,使用yum安装相关工具。


                # yum install ncurses-devel


        修改以下几点配置:


                a) Memory selection  ---> NAND flash configuration  --->

 

                b) U-Boot Image Storage Setup  --->

        5) #make CROSS_COMPILE=arm-linux-

        在http://www.at91.com/linux4sam/bin/view/Linux4SAM/AT91Bootstrap中有以下说明:

        # make CROSS_COMPILE=arm-none-linux-gnueabi-


        编译成功!生成的文件在binaries目录下。

 

        虽然可以编译成功,但下载到目标板上无法运行,连串口输出信息都没有。弄了很久都没有成功,也许使用高版本的Bootstrap对9260支持不太好,为了不影响总进度,先跳过这一步,使用Bootstrap V1.9进行移植。详细请参考《Bootstrap_V1.9移植.doc》。


3. U-BOOT编译

a) 根据UBOOT目录下的./doc/README.at91文档所述,用命令make at91sam9260ek_nandflash_config生成配置文件

b) 修改配置文件gedit ./include/configs/at91sam9260ek.h


        i. 修改U-BOOT参数地址

        ii. 去掉不必要的指令,只保留NAND指令即可

        iii. 修改启动命令


                “nand read.jffs2 0x22000000 0xA0000 0x200000; bootm”

 

        完成后使用make开始编译。将生成的u-boot.bin烧写到NAND的0x00020000位置,并烧写前面生成的bootstrap。LINUX镜像暂时使用以前制作过的一个,烧到0xa0000位置。完成镜像烧写后重新启动开发板。在DEBUG窗口上可看到引导LINUX成功。

4. LINUX编译

a) 解压内核到当前目录


        unzip -d ./ /media/sf_ShareDIR/source/linux-at91-linux-2.6.39-at91.zip


b) 进入内核源码根目录:make mrproper


c) 生成AT91SAM9260EK默认配置,配置文件在./arch/arm/configs/中


        make ARCH=arm at91sam9260ek_defconfig


d) 进入menuconfig配置菜单


        make ARCH=arm menuconfig


e) 板级配置


        gedit ./arch/arm/mach-at91/board-sam9260ek.c


        i. MTD分区配置


/*


 * NAND flash


 */


static struct mtd_partition __initdata ek_nand_partition[] = {


{


.name = 'bootstrap',


.offset = 0,


.size = 128*1024,


},


{


.name = 'uboot',


.offset = 128*1024,


.size = 256*1024,


},


{


.name = 'env1',


.offset = 128*1024+256*1024,


.size = 128*1024,


},


{


.name = 'env2',


.offset = 512*1024,


.size = 128*1024,


},


{


.name = 'linux',


.offset = 640*1024,


.size = 2*1024*1024,


},


{


.name = 'root',


.offset = 640*1024+2*1024*1024,


.size = 5*1024*1024,


},


{


.name = 'user',


.offset = 640*1024+7*1024*1024,


.size = MTDPART_SIZ_FULL,


},


};


f) 配置内核(make menuconfig)


        i. 配置支持NFS


                File systems  --->Network File Systems  --->


                        <*>   NFS client support


                        [*]     NFS client support for NFS version 3


                        [*]       NFS client support for the NFSv3 ACL protocol extension


                        [*]     NFS client support for NFS version 4


                        [*]       NFS client support for NFSv4.1 (EXPERIMENTAL)


                        [*]   Root file system on NFS



g) 生成U-BOOT引导的镜像


        make ARCH=arm CROSS_COMPILE=arm-linux- uImage


        提示没有安装mkimage工具,这个工具可以从U-BOOT目录下获取,并复制到/usr/bin目录下即可。


         cp ../../2.u-boot/u-boot-at91-u-boot-2013.07-at91/tools/mkimage /usr/bin/



5. 通过U-BOOT的TFTP命令从TFTP服务器下载系统镜像

        参考文档“CentOS下架设TFTP服务器.doc”架设服务器。修改UBOOT源码,使支持相关命令并设置服务器IP(这个设置较简单,这里省略)。


        U-BOOT命令为:


                setenv bootcmd 'tftp 0x22000000 /AT91SAM9260EK/uImage;bootm;'


复制内核镜像到TFTP目录:


        # /bin/cp arch/arm/boot/uImage /opt/TFTP_DIR/AT91SAM9260EK/


6. 文件系统制作

        文件系统使用以前为AM1808核心板制作的这个,压缩包为fs_lsh_20130320.tar.bz2(http://pan.baidu.com/s/1pJylrBX),详细制作方法可参考文档”AM1808核心板创建最小文件系统.doc”。


7. 挂载NFS作为根文件系统

a) 将文件系统解压到/opt/AT91SAM9260EK/4.FS/opt/AT91SAM9260EK/4.FS目录下,并重命名为NFS


        # tar -xvf /media/sf_ShareDIR/source/fs_lsh_20130320.tar.bz2 -C /opt/AT91SAM9260EK/4.FS/


        # mv /opt/AT91SAM9260EK/4.FS/fs_lsh/ /opt/AT91SAM9260EK/4.FS/NFS


b) 修改NFS配置文件


        # gedit /etc/exports


        配置:/opt/AT91SAM9260EK/4.FS/NFS *(rw,no_root_squash,no_all_squash,sync)


c) 重启NFS服务器


        # service nfs restart


d) 测试NFS服务器是否成功启动


        # mount -t nfs localhost:/opt/AT91SAM9260EK/4.FS/NFS /mnt/


        # umount /mnt


e) 修改U-BOOT参数(可以在代码中固化,也可以在U-BOOT命令行中输入setenv命令进行设置)


 setenv bootargs 'mem=64M console=ttyS0,115200 mac=00:60:6E:42:BA:80 root=/dev/nfs nfsroot=192.168.1.222:/opt/AT91SAM9260EK/4.FS/NFS ip=192.168.1.123:192.168.1.222:192.168.1.1:255.255.255.0:::eth0:off '


f) U-BOOT的网络参数设置,并打开PING命令(用于测试网络是否正常)


        #define CONFIG_ETHADDR  10:23:45:67:89:AB


        #define CONFIG_NETMASK      255.255.255.0


        #define CONFIG_IPADDR 192.168.1.123


        #define CONFIG_SERVERIP 192.168.1.222


g) 下载运行并进行内核修改


        i. 提示如下图所示错误。经分析原因为无法与NFS服务器通讯,内核中的NFS功能已经都打开了,发现输出信息中,没有连接网络的相关执行,估计应该为网络驱动的问题。修改网络驱动配置后即可(此步骤在前面内核移植中已经配置过了)。


        Menuconfig:


                Device Drivers  --->Network device support  ---> Ethernet (10 or 100Mbit)  ---> <*>   Atmel MACB support


                VFS: Unable to mount root fs via NFS, trying floppy.


                VFS: Cannot open root device 'nfs' or unknown-block(2,0)

ii. 修改网络配置后,从打印信息中可以看出,已经可以挂载NFS文件系统了。目前系统停在了Kernel panic中。这种情况可能由于编译busybox时,使用的编译器版本引起的。打开以下内核配置即可解决。


        Menuconfig:


                Kernel Features  --->


                        [*] Use the ARM EABI to compile the kernel


                        [*]   Allow old ABI binaries to run with this kernel (EXPERIMENTAL) (NEW


        Kernel panic - not syncing: Attempted to kill init!

iii. 现在已经可以成功挂载NFS文件系统了,运行到下图所示位置。提示IP地址设置失败,由于我没有故意去设置IP地址,还提示这个,所以怀疑是启动文件中进行重新设置,打开/etc/init.d/rcS文件,去除相关代码,只保留以下内容即可。


nfs: server 192.168.1.222 not responding, still trying

 

iv. 接下来运行出现无法打开串口的错误,如下图所示。控制台串口打开失败之类的错误,修改/etc/inittab文件中的控制台配置,将串口号改为console即可。


        atmel_usart atmel_usart.2: Not supported ip name, set to uart

三、总结

        到目前为止,已经可以正常启动LINUX操作系统了,并搭建了TFTP、NFS的开发环境。可以在此系统下方便地进行应用、驱动、内核的开发。各个代码打包后已经上传至网盘。


        201407091104_at91sam9260ek_linux.2.6.39.tar.bz2 


                http://pan.baidu.com/s/1o6LTNRW 


                已根据“AT91SAM9260开发板驱动编写.doc”集成各个驱动的代码。



        201407221308_Bootstrap-v1.9.tar.bz2


                http://pan.baidu.com/s/1lK7EY



        201407221321_u-boot-at91-u-boot-2013.07-at91.tar.bz2


                 http://pan.baidu.com/s/1gdoYjp5 


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章