原创 mini2410

2010-4-15 18:27 3650 10 13 分类: MCU/ 嵌入式

mini2410


by panasonic.lin@163.com
最近在淘宝上淘了一块友善的SBC2410X的板子,感谢MID大哥这么慷慨热心,让我可以play arm9 with linux
起码不是在虚拟机qemu里面兜两圈拉。
虽然板子里面友善已经移植好了uboot1.1以及vivi,但是赫赫,还是自己动手实践一下才能学习到东西。
移植都大同小异拉,最新的uboot200911已经包含了sbc2410x这块板子了,所以步骤比较简单,我也是在
?
移植u-boot-2009-11->S3c44b0公板的时候学到不少东西。
1.
修改Makefile
CROSS_COMPILE =arm-none-eabi-
2.make clean;make sbc2410x_config;
3.
make之前,我这块板子上的norflash不是标配的am29lv800db,而是am29lv160db,容量大一倍,

友善自带的光盘上的jtag烧写软件sjf2410烧写不了am29lv160dbh-jtag可以直接烧写。看来只能改拉,不改动可以用,但是
问题会很多。
首先include/configs目录下的sbc2410x.h配置文件, 附件是补丁patch,更改了nfs以及flash,注意这里的串口1很容易唬人。
https://static.assets-stash.eet-china.com/album/old-resources/2010/4/15/9b82b5c3-aadb-4ffc-9e55-76a14f14fb26.rar
其次board/sbc2410x目录下的flash.c文件,附件是补丁,还是那句老话,这个需要看flashdatasheet,看看扇区分布以及
擦写命令集。
https://static.assets-stash.eet-china.com/album/old-resources/2010/4/15/aa0ae241-8581-444e-af7a-94f2d715269a.rar
4.make
后直接用h-jtag烧写到板子上,然后把跳线跳到nor启动。
有关ubootnand启动的很多文章都有介绍,我就不写了,等我nor启动系统正常后,回去偷偷弄来玩下。

uboot
启动后可以用uboot的命令检验一下,最重要的是flinfo
好了,下面弄内核,最新的linux2.6.30已经包含了2410的平台,可以进入/arch/arm/configs看看常用的配置。
也可以输入make help看看合适的平台。
panasonic@linux-tricy:~/Data/linux-2.6.30> make help
Cleaning targets:
  clean       - Remove most generated files but keep the config and
                    enough build support to build external modules
  mrproper    - Remove all generated files + config + various backup files
  distclean   - mrproper + remove editor backup and patch files

  rpc_defconfig            - Build for rpc
  rx51_defconfig           - Build for rx51
  s3c2410_defconfig        - Build for s3c2410
  s3c6400_defconfig        - Build for s3c6400
  sam9_l9260_defconfig     - Build for sam9_l9260
修改make file的交叉编译器后,直接用2410默认配置,然后make menuconfig或者make xconfig或者make gconfig配置。
配置的时候注意选用EABI编译内核,也选上nfs的支持,其他看着办。
> make s3c2410_defconfig
> make zImage
之后生成压缩的映像,如果需要uboot boottm命令启动的话还需要生成uImage,其实直接用make uImage也行,需要配置
压缩的textbss地址,菜单上有。我直接用下面命令生成了。
> mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -n Linux2.6.30 -d ./zImage uImage
启动uboot,下载映像到内存。
[Panasonic@163.com ]# tftp 30008000 uImage                                     
Using CS8900-0 device                                                          
TFTP from server 192.168.0.1; our IP address is 192.168.0.2                    
Filename 'uImage'.                                                             
Load address: 0x30008000                                                       
Loading: #################################################################     
         #################################################################     
         #                                                                     
done                                                                           
Bytes transferred = 1919060 (1d4854 hex)                                        
验证一下映像头。
[Panasonic@163.com ]# iminfo                                                                                                                                   
## Checking Image at 30008000 ...                                               
   Legacy image found                                                          
   Image Name:   Linux2.6.30                                                   
   Created:      2010-04-13   5:53:57 UTC                                       
   Image Type:   ARM Linux Kernel Image (uncompressed)                         
   Data Size:    1918996 Bytes =  1.8 MB                                       
   Load Address: 30008000                                                       
   Entry Point:  30008040                                                      
   Verifying Checksum ... OK                                                   
好了,可以启动内核拉!
结果内核找不到网卡,估计没有cs8900a的驱动。


点击看大图
1 .
/arch/arm/plat-s3c24xx/include/plat/common-smdk.h文件中添加映射信息其中使用宏__phys_to_pfn 即将物理地址右移12
#define pSMDK2410_ETH_IO __phys_to_pfn(0x19000000)
#define vSMDK2410_ETH_IO S3C2410_ADDR(0x04000000)
#define SMDK2410_ETH_IRQ IRQ_EINT9
***********************************************************************************
2.arch/arm/mach-s3c2410/mach-smdk2410.c
添加地址映射
static struct map_desc smdk2410_iodesc[] __initdata={
+ {vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE} //
添加
};
***********************************************************************************
3.
修改 drivers/net/cs89x0.cdiff补丁见附件。


https://static.assets-stash.eet-china.com/album/old-resources/2010/4/15/8a607bba-07db-4b79-9f25-6b26fc7a73f3.rar
4.
重新make menuconfig的时候在设备驱动/网络设备里可能要打开NET_PCI或者NET_ISA的选项才会有cs89x0的选项。
重新make uImage

下面开始弄根文件系统,建立空文件夹或者建立etc配置文件或者脚本参见google,重点是busybox.
这里用的是busybox1.15.2,编译它和内核都是用
gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)
编译busybox选择静态编译,make install到当前目录的_install目录,其他默认,最后cp -anfs根文件系统目录下。

出乎意料的是,不管我怎么弄,都出现了kill init的内核panic。但是友善自带的根文件系统没问题,问题一定是出在编译器。


点击看大图
Sourcery G++
自带的PDF文档里面getting start有很重要的一点就是,默认编译出来的代码是armv5的!除非你传递参数给gcc指定
编译出armv4t的代码,传递的参数是-march=armv4t!s3c2410/s3c2440corearm920t应该是armv4t的架构。
点击看大图


从读取的elf头来看确实有点差异


点击看大图


点击看大图



3.2.2. Compiling for ARMv4t systems
By default Sourcery G++ generates Linux binaries that require an ARMv5 or later CPU. To build
applications or libraries capable of running on ARMv4t CPUs, use the -march=armv4t command-
line option.
Runtime libraries suitable for ARMv4t systems are supplied in the armv4t subdirectory.
Code compiled for ARMv4t is ABI compatible with ARMv5 code. Code and binaries compiled for
different architectures may be mixed freely.
     Caution
     There are several other ways to tell the compiler to generate ARMv4t code. However
     -march=armv4t must be used when linking to ensure the correct libraries and startup
     code are selected.
在编译busybox的时候添加指定的CFLAGS=-march=armv4t,根文件系统总算完成拉。


点击看大图
下面弄个最简单的hello测试一下:
#include<stdio.h>
int main(void)
{

printf("Hello World!\n");
return 1;

}
panasonic@linux-tricy:~/app> arm-none-linux-gnueabi-gcc -o hello -static hello.c
没加-march=armv4t运行,结果是非法指令!


点击看大图
panasonic@linux-tricy:~/app> arm-none-linux-gnueabi-gcc -march=armv4t -o hello -static hello.c
加了-march=armv4t后运行正常。
点击看大图
为了方便以后编译程序模块,要想个法子才行,友善的做法很好,就是建立带参数的脚本代替gcc,脚本是另外一个名字,叫arm-linux-gcc!脚本内容如下
#!/bin/bash

exec arm-none-linux-gnueabi-gcc -march=armv4t $*
g++
也类似。其他工具arld阿统统建立符号链接。最后加入搜索路径方便使用。


点击看大图
gedit ~/.bashrc
source ~/.bashrc
好了,mini2410就到这里拉。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 点击看大图

文章评论3条评论)

登录后参与讨论

用户156547 2010-10-9 16:27

以下命令才是看架构的,你的那个不是 //---armv5编译: //////////////////////////////////////////////////////////////////////// [root@vmFedora13 busybox]# arm-none-linux-gnueabi-readelf -A busybox Attribute Section: aeabi File Attributes Tag_CPU_name: "5TE" Tag_CPU_arch: v5TE Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_ABI_PCS_wchar_t: 4 Tag_ABI_FP_denormal: Needed Tag_ABI_FP_exceptions: Needed Tag_ABI_FP_number_model: IEEE 754 Tag_ABI_align_needed: 8-byte Tag_ABI_align_preserved: 8-byte, except leaf SP Tag_ABI_enum_size: int Tag_ABI_optimization_goals: Aggressive Speed Tag_DIV_use: Not allowed //---armv4t编译: //////////////////////////////////////////////////////////////////////// [root@vmFedora13 busybox]# arm-none-linux-gnueabi-readelf -A busybox Attribute Section: aeabi File Attributes Tag_CPU_name: "4T" Tag_CPU_arch: v4T Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_ABI_PCS_wchar_t: 4 Tag_ABI_FP_denormal: Needed Tag_ABI_FP_exceptions: Needed Tag_ABI_FP_number_model: IEEE 754 Tag_ABI_align_needed: 8-byte Tag_ABI_align_preserved: 8-byte, except leaf SP Tag_ABI_enum_size: int Tag_ABI_optimization_goals: Aggressive Speed Tag_DIV_use: Not allowed

用户1620250 2010-4-18 09:24

200RMB~

tengjingshu_112148725 2010-4-16 01:09

多少米买来的啊
相关推荐阅读
用户1620250 2013-06-14 21:21
CIMCOEdit5自动生成轮廓的G代码
做了台全自动的NC数控玻璃切割机,感觉就是一台CNC的雏形了。     不管是哪一类的机床,只要是 NC 加工,零件的加工步骤如下: 1. 分析研究零件图; 2. 选择最合适...
用户1620250 2012-12-30 22:38
STM32 FSMC与FPGA 存储器接口 读写
  STM32 FSMC与FPGA 存储器接口 读写  panasonic.lin@163.com FPG...
用户1620250 2012-01-12 21:33
DSP/BIOS:Cannot create/delete a Clock from Hwi or Swi thread
DSP/BIOS:Cannot create/delete a Clock from Hwi or Swi thread 上篇文章提到Task_sleep睡死的问题解决后,添加了系统心跳cloc...
用户1620250 2012-01-12 21:28
DSP/BIOS:Task_sleep睡死的问题
程序其中的一个任务调用了Task_sleep(100),结果睡死在里面,用ROV查看任务的状态,Blocked阻塞,但是阻塞点是Unknown. 这是因为没有添加clock模块到系统...
用户1620250 2011-12-23 00:55
TI DSP 28335 CCSV4 外置SRAM调试(二)
11.为再次确保万无一失,往外置SRAM读写校验一下   12由于板子设置了从FLASH boot,FLASH内还有程序,debug 在LOAD了程序后自动复位然后运行了flash的...
用户1620250 2011-12-23 00:38
TI DSP 28335 CCSV4 外置SRAM调试(一)
DSP28335有内置256K X 16的FLASH,34K X 16的RAM,但是如果运行一个大一点的系统,如SYS/BIOS,这么小的RAM很难容纳的下,如果在FLASH中调试的话,每次都烧写...
我要评论
3
10
关闭 站长推荐上一条 /2 下一条