此文档是基于at91sam9261这款CPU来进行记录的
对于移植一个自己的linux内核来说,需要下面的几个步骤:
一:首先要让系统跑起来需要一个一级启动代码,这个可以从atmel官方去下载.
root@emboard:/workdir/at91sam9261/AT91Bootstrap#ls
AT91Bootstrap1.14.zip
二:下载纯净的linux内核,和该内核所对应的该系列CPU的补丁.
root@emboard:/workdir/at91sam9261/kernel#ls-l
-rw-rw-rw-1rootroot291272008-10-1312:542.6.24.at91.2-exp.patch.gz
-rw-rw-rw-1rootroot1451642008-10-1313:042.6.24-at91.patch.gz
-rw-rw-rw-1rootroot467377832009-06-1510:32linux-2.6.24.tar.bz2
三:下载适合的交叉编译工具:
root@emboard:/workdir/at91sam9261/crosstool#ls-l
-rw-rw-rw-1rootroot674813462009-12-1520:25arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
四:下载u-boot,同时可以在atmel官方去下载u-boot的补丁
root@emboard:/workdir/at91sam9261/u-boot#ls-l
total7668
-rw-rw-rw-1rootroot1114182009-10-2310:08u-boot-1.3.4-exp.3.diff
-rw-rw-rw-1rootroot77144562009-05-1109:51u-boot-1.3.4.tar.bz2
五:下载busybox用来制作根文件系统:
root@emboard:/workdir/at91sam9261/filesyetem#ls-l
total1888
-rw-rw-rw-1rootroot19249802010-02-2321:10busybox-1.11.2.tar.bz2
注:以上的我只是说明我用的文件名,具体的下载路径我没写,因为有的链接可能失效.
这样的话,有以上的文件就可以使这个linux的最小系统在这个板子上跑起来了.
接下来就是进行解压配置了:
先可以根据自己的需要建立文件夹,最好是每个文件用单独的文件夹做出来,这样利于自己看的清楚,下面是我的文件夹目录:
root@emboard:/workdir/at91sam9261#ls-l
total24
drwxr-xr-x3rootroot40962010-04-0910:53AT91Bootstrap
drwxr-xr-x3rootroot40962010-04-0509:32crosstool
drwxr-xr-x3rootroot40962010-04-0513:32filesyetem
drwxr-xr-x3rootroot40962010-04-0509:41kernel
-rw-r--r--1rootroot2142010-04-0511:59setenv-9261
drwxr-xr-x3rootroot40962010-04-0510:32u-boot
注意上面绿色的文件是一个脚本文件,是用来配置环境变量的.这个会在后面有所说明.
第一步:当然是配置交叉编译工具了,这个不做,你后面的东西根本就没办法在你的板子上跑起来.
root@emboard:/workdir/at91sam9261#cdcrosstool/
root@emboard:/workdir/at91sam9261/crosstool#tar-xjvfarm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
root@emboard:/workdir/at91sam9261/crosstool#ls
arm-2008q1
arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
root@emboard:/workdir/at91sam9261/crosstool#cdarm-2008q1
root@emboard:/workdir/at91sam9261/crosstool/arm-2008q1#ls
arm-none-linux-gnueabibinincludeliblibexecshare
root@emboard:/workdir/at91sam9261/crosstool#cdarm-2008q1
root@emboard:/workdir/at91sam9261/crosstool/arm-2008q1#ls
arm-none-linux-gnueabibinincludeliblibexecshare
root@emboard:/workdir/at91sam9261/crosstool/arm-2008q1#cdbin/
root@emboard:/workdir/at91sam9261/crosstool/arm-2008q1/bin#ls
arm-none-linux-gnueabi-addr2linearm-none-linux-gnueabi-g arm-none-linux-gnueabi-gprofarm-none-linux-gnueabi-readelf
arm-none-linux-gnueabi-ararm-none-linux-gnueabi-gccarm-none-linux-gnueabi-ldarm-none-linux-gnueabi-size
arm-none-linux-gnueabi-asarm-none-linux-gnueabi-gcc-4.2.3arm-none-linux-gnueabi-nmarm-none-linux-gnueabi-sprite
arm-none-linux-gnueabi-c arm-none-linux-gnueabi-gcovarm-none-linux-gnueabi-objcopyarm-none-linux-gnueabi-strings
arm-none-linux-gnueabi-c filtarm-none-linux-gnueabi-gdbarm-none-linux-gnueabi-objdumparm-none-linux-gnueabi-strip
arm-none-linux-gnueabi-cpparm-none-linux-gnueabi-gdbtuiarm-none-linux-gnueabi-ranlib
root@emboard:/workdir/at91sam9261/crosstool/arm-2008q1/bin#pwd
/workdir/at91sam9261/crosstool/arm-2008q1/bin
可见进入bin目录就可以看到我们所需要的交叉编译工具.
root@emboard:/workdir/at91sam9261/crosstool/arm-2008q1/bin#cd../../..
root@emboard:/workdir/at91sam9261#ls
AT91Bootstrapcrosstoolfilesyetemkernelsetenv-9261u-boot
root@emboard:/workdir/at91sam9261#vimsetenv-9261
建立一个脚本文件用来配置环境变量.
#!/bin/sbin/
echo"settheat91sam9261....."
exportPATH=$PATH:/workdir/at91sam9261/crosstool/arm-2008q1/bin/
rm*~
然后保存退出,这样只要运行这个脚本就可以设置好环境变量,但是只是针对于本终端,这样做有个好处就是不污染你的系统.麻烦的就是每次打开这个终端都要去执行这个脚本来配置.
root@emboard:/workdir/at91sam9261#chmod xsetenv-9261
root@emboard:/workdir/at91sam9261#.setenv-9261
settheat91sam9261.....
rm:cannotremove`*~':Nosuchfileordirectory
root@emboard:/workdir/at91sam9261#arm-none-linux-gnueabi-gcc-v
Usingbuilt-inspecs.
Target:arm-none-linux-gnueabi
Configuredwith:/scratch/sandra/lite/src/gcc-4.2/configure--build=i686-pc-linux-gnu--host=i686-pc-linux-gnu--target=arm-none-linux-gnueabi--enable-threads--disable-libmudflap--disable-libssp--disable-libgomp--disable-libstdcxx-pch--with-gnu-as--with-gnu-ld--enable-languages=c,c --enable-shared--enable-symvers=gnu--enable-__cxa_atexit--with-pkgversion=SourceryG Lite2008q1-126--with-bugurl=https://support.codesourcery.com/GNUToolchain/--disable-nls--prefix=/opt/codesourcery--with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc--with-build-sysroot=/scratch/sandra/lite/linux/install/arm-none-linux-gnueabi/libc--enable-poison-system-directories--with-build-time-tools=/scratch/sandra/lite/linux/install/arm-none-linux-gnueabi/bin--with-build-time-tools=/scratch/sandra/lite/linux/install/arm-none-linux-gnueabi/bin
Threadmodel:posix
gccversion4.2.3(SourceryG Lite2008q1-126)
这样就说明交叉编译工具的环境变量已经设置好了,可以进行下面的步骤了.
第二步:解压编译一级启动代码:
root@emboard:/workdir/at91sam9261/AT91Bootstrap#ls
AT91Bootstrap1.14.zip
root@emboard:/workdir/at91sam9261/AT91Bootstrap#unzipAT91Bootstrap1.14.zip
这样就在当前目录下解压了文件:
root@emboard:/workdir/at91sam9261/AT91Bootstrap#ls
AT91Bootstrap1.14.zipBootstrap-v1.14
现在我们可以进入解压后文件的目录进行针对自己的修改了,不过一般没必要做太大的修改,那么多代码看起来也比较头疼的!对整体架构不清楚很难做出正确的修改.
说明:因为我这个板子上面没有网卡,所以不能进行NFS文件系统这样的开发,我为了我方便,我把不用去修改的放在dataflash里面,需要修改的内核和文件系统我放在nandflash里面,这样我每次烧写就不用去重复了.
首先我对我的内存存储分配:
以下是我的存储空间的安排:
dataflash0x8000u-boot
nandflash0x00000000kernel
nandflash0x00400000ramdisk.gz
因为默认的地址和我这个有点冲突,所以就要对有的文件进行修改:
进入下面目录:
root@emboard:/workdir/at91sam9261/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9261ek/dataflash#pwd
/workdir/at91sam9261/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9261ek/dataflash
root@emboard:/workdir/at91sam9261/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9261ek/dataflash#ls
at91sam9261ek.hdataflash_at91sam9261ek.bindataflash_at91sam9261ek.elfdataflash_at91sam9261ek.mapMakefile
修改at91sam9261ek.h
找到修改位置:
/*********************************************************************/
/*BootStrapSettings*/
/**/
/*********************************************************************/
#defineAT91C_SPI_PCS_DATAFLASHAT91C_SPI_PCS0_DATAFLASH/*BootonSPINCS0*/
#defineIMG_ADDRESS0x8400/*ImageAddressinDataFlash*/
#defineIMG_SIZE0x33900/*ImageSizeinDataFlash*/
#defineMACH_TYPE0x350/*AT91SAM9261-EK*/
#defineJUMP_ADDR0x23F00000/*FinalJumpAddress*/
修改为:
/*********************************************************************/
/*BootStrapSettings*/
/**/
/*********************************************************************/
#defineAT91C_SPI_PCS_DATAFLASHAT91C_SPI_PCS0_DATAFLASH/*BootonSPINCS0*/
//#defineIMG_ADDRESS0x8400/*ImageAddressinDataFlash*/
//#defineIMG_SIZE0x33900/*ImageSizeinDataFlash*/
/*********************************************************************/
/*Date:20100409*/
/*Author:microcreat*/
/*Modification:changedtheImageAddressinDataFlash*/
/*andtheImageSizeinDataFlash*/
/*********************************************************************/
#defineIMG_ADDRESS0x8000/*ImageAddressinDataFlash*/
#defineIMG_SIZE0x80000/*ImageSizeinDataFlash*/
#defineMACH_TYPE0x350/*AT91SAM9261-EK*/
#defineJUMP_ADDR0x23F00000/*FinalJumpAddress*/
然后进行编译:
修改Makefile文件:
root@emboard:/workdir/at91sam9261/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9261ek/dataflash#vimMakefile
#TODO:setthisappropriatelyforyourlocaltoolchain
ifndefERASE_FCT
ERASE_FCT=rm-f
endif
ifndefCROSS_COMPILE
CROSS_COMPILE=arm-none-linux-gnueabi-
endif
修改使用的交叉编译工具.
保存退出,make
root@emboard:/workdir/at91sam9261/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9261ek/dataflash#make
root@emboard:/workdir/at91sam9261/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9261ek/dataflash#ls
at91sam9261ek.hcrt0_gnu.odataflash_at91sam9261ek.elfdataflash.odiv0.omain.opmc.ostring.o_udivsi3.o
at91sam9261ek.odataflash_at91sam9261ek.bindataflash_at91sam9261ek.mapdebug.ogpio.oMakefilesdramc.oudiv.o_umodsi3.o
这样就看到编译成功,然后将编译生成的"dataflash_at91sam9261ek.bin"烧人板子的dataflash里面,这样就完成了一级启动代码的烧录.
*****烧写使用samba软件,用法在后面一个单独的文章来说明.
这样就完成了基于dataflash的一级启动代码的编译工作.(烧写一级启动代码可以见另外一篇文章<<at91sam9261-Samba软件的安装与应用>>)
第三步:解压并编译u-boot
上面进行了一级启动代码的移植,现在开始做u-boot的移植,一级启动代码里面设置了u-boot在dataflash里面的烧写地址.
打开u-boot目录,解压u-boot源代码并且打入补丁.
root@emboard:/workdir/at91sam9261/u-boot#ls-l
total7668
-rw-rw-rw-1rootroot1114182009-10-2310:08u-boot-1.3.4-exp.3.diff
-rw-rw-rw-1rootroot77144562009-05-1109:51u-boot-1.3.4.tar.bz2
root@emboard:/workdir/at91sam9261/u-boot#tar-xjvfu-boot-1.3.4.tar.bz2
root@emboard:/workdir/at91sam9261/u-boot#ls
u-boot-1.3.4u-boot-1.3.4-exp.3.diffu-boot-1.3.4.tar.bz2
进入u-boot目录:
root@emboard:/workdir/at91sam9261/u-boot#cdu-boot-1.3.4
将补丁复制到u-boot目录里:
root@emboard:/workdir/at91sam9261/u-boot/u-boot-1.3.4#cp../u-boot-1.3.4-exp.3.diff.
打入atmel的补丁:
root@emboard:/workdir/at91sam9261/u-boot/u-boot-1.3.4#catu-boot-1.3.4-exp.3.diff|patch-p1
现在为止,u-boot已经打入了atmel的补丁,现在可以进行下面的编译过程了.
可以删除这个补丁文件.
root@emboard:/workdir/emboard-9261/at91sam9261/u-boot#rmu-boot-1.3.4-exp.3.diff
可以看到一级启动代码中的
root@emboard:/workdir/at91sam9261/AT91Bootstrap/Bootstrap-v1.14/board/at91sam9261ek/dataflash#ls
at91sam9261ek.hcrt0_gnu.odataflash_at91sam9261ek.elfdataflash.odiv0.omain.opmc.ostring.o_udivsi3.o
at91sam9261ek.odataflash_at91sam9261ek.bindataflash_at91sam9261ek.mapdebug.ogpio.oMakefilesdramc.oudiv.o_umodsi3.o
中的at91sam9261ek.h文件
#defineJUMP_ADDR0x23F00000/*FinalJumpAddress*/
和u-boot文件中的"config.mk"的地址一致.
root@emboard:/workdir/at91sam9261/u-boot/u-boot-1.3.4/board/atmel/at91sam9261ek#ls
at91sam9261ek.cat91sam9261ek.oconfig.mkled.cled.olibat91sam9261ek.aMakefilenand.cnand.opartition.cpartition.o
root@emboard:/workdir/at91sam9261/u-boot/u-boot-1.3.4/board/atmel/at91sam9261ek#catconfig.mk
TEXT_BASE=0x23f00000
到此为止,也可以直接去编译,可以用at91am9261的默认配置,但是你可以对nandflash分为几个区,分别用来存储内核和文件系统等.
这个地址分配可以修改u-boot源码文件下的"at91sam9261ek.h"这个文件!
这个文件的目录是:
root@emboard:/workdir/at91sam9261/u-boot/u-boot-1.3.4/include/configs#pwd
/workdir/at91sam9261/u-boot/u-boot-1.3.4/include/configs
这个目录前面的不是绝对的,根据你自己所建立的目录为准,后面的目录才是这个文件所在的位置.
#ifdefCFG_USE_DATAFLASH_CS0
/*bootstrap u-boot env linuxindataflashonCS0*/
#defineCFG_ENV_IS_IN_DATAFLASH1
#defineCFG_MONITOR_BASE(CFG_DATAFLASH_LOGIC_ADDR_CS0 0x8400)
#defineCFG_ENV_OFFSET0x4200
#defineCFG_ENV_ADDR(CFG_DATAFLASH_LOGIC_ADDR_CS0 CFG_ENV_OFFSET)
#defineCFG_ENV_SIZE0x4200
#defineCONFIG_BOOTCOMMAND"cp.b0xC00420000x220000000x210000;bootm"
#defineCONFIG_BOOTARGS"console=ttyS0,115200"\
"root=/dev/mtdblock0"\
"mtdparts=at91_nand:-(root)"\
"rwrootfstype=jffs2"
#elifCFG_USE_DATAFLASH_CS3
/*bootstrap u-boot env linuxindataflashonCS3*/
#defineCFG_ENV_IS_IN_DATAFLASH1
#defineCFG_MONITOR_BASE(CFG_DATAFLASH_LOGIC_ADDR_CS3 0x8400)
#defineCFG_ENV_OFFSET0x4200
#defineCFG_ENV_ADDR(CFG_DATAFLASH_LOGIC_ADDR_CS3 CFG_ENV_OFFSET)
#defineCFG_ENV_SIZE0x4200
#defineCONFIG_BOOTCOMMAND"cp.b0xD00420000x220000000x210000;bootm"
#defineCONFIG_BOOTARGS"console=ttyS0,115200"\
"root=/dev/mtdblock0"\
"mtdparts=at91_nand:-(root)"\
"rwrootfstype=jffs2"
#else/*CFG_USE_NANDFLASH*/
/*bootstrap u-boot env linuxinnandflash*/
#defineCFG_ENV_IS_IN_NAND1
#defineCFG_ENV_OFFSET0x60000
#defineCFG_ENV_OFFSET_REDUND0x80000
#defineCFG_ENV_SIZE0x20000/*1sector=128kB*/
#defineCONFIG_BOOTCOMMAND"nandread0x220000000xA00000x200000;bootm"
#defineCONFIG_BOOTARGS"console=ttyS0,115200"\
"root=/dev/mtdblock5"\
"mtdparts=at91_nand:128k(bootstrap)ro,"\
"256k(uboot)ro,128k(env1)ro,"\
"128k(env2)ro,2M(linux),-(root)"\
"rwrootfstype=jffs2"
#endif
以上的部分可以看出每个flash里面的默认分区,应为我想把u-boot放在dataflash,我板子上的片选是cs0,所以我就可以按照我的想法去修改上面CS0的dataflash的分区信息.
修改如下:
#ifdefCFG_USE_DATAFLASH_CS0
/*bootstrap u-boot env linuxindataflashonCS0*/
#defineCFG_ENV_IS_IN_DATAFLASH1
/*********************************************************************/
/*Date:20100409*/
/*Author:microcreat*/
/*Modification:changedtheadress,*/
/*keepthesameofBootstrap-v1.14/board/at91sam9261ek/*/
/*dataflash/at91sam9261ek.h!*/
/*********************************************************************/
//#defineCFG_MONITOR_BASE(CFG_DATAFLASH_LOGIC_ADDR_CS0 0x8400)
#defineCFG_MONITOR_BASE(CFG_DATAFLASH_LOGIC_ADDR_CS0 0x8000)
#defineCFG_ENV_OFFSET0x4000
#defineCFG_ENV_ADDR(CFG_DATAFLASH_LOGIC_ADDR_CS0 CFG_ENV_OFFSET)
#defineCFG_ENV_SIZE0x4000
#defineCONFIG_BOOTCOMMAND"cp.b0xC00420000x220000000x210000;bootm"
#defineCONFIG_BOOTARGS"console=ttyS0,115200"\
"root=/dev/mtdblock0"\
"mtdparts=at91_nand:-(root)"\
"rwrootfstype=jffs2"
修改这个入口地址后,然后修改分区信息:
进入下面的目录:
root@emboard:/workdir/at91sam9261/u-boot/u-boot-1.3.4/board/atmel/at91sam9261ek#pwd
/workdir/at91sam9261/u-boot/u-boot-1.3.4/board/atmel/at91sam9261ek
root@emboard:/workdir/at91sam9261/u-boot/u-boot-1.3.4/board/atmel/at91sam9261ek#ls
at91sam9261ek.cat91sam9261ek.oconfig.mkled.cled.olibat91sam9261ek.aMakefilenand.cnand.opartition.cpartition.o
修改"partition.c"这个文件.
/*definetheareaoffsets*/
dataflash_protect_tarea_list[NB_DATAFLASH_AREA]={
{0x00000000,0x000041FF,FLAG_PROTECT_SET,0,"Bootstrap"},
{0x00004200,0x000083FF,FLAG_PROTECT_CLEAR,0,"Environment"},
{0x00008400,0x00041FFF,FLAG_PROTECT_SET,0,"U-Boot"},
{0x00042000,0x00251FFF,FLAG_PROTECT_CLEAR,0,"Kernel"},
{0x00252000,0xFFFFFFFF,FLAG_PROTECT_CLEAR,0,"FS"},
};
这个是原始文件,我们可以根据自己的需要去修改:
我的修改如下:
/*********************************************************************/
/*Date:20100409*/
/*Author:microcreat*/
/*Modification:changedtheadress,*/
/*keepthesameofBootstrap-v1.14/board/at91sam9261ek/*/
/*dataflash/at91sam9261ek.h!*/
/*********************************************************************/
/*definetheareaoffsets*/
dataflash_protect_tarea_list[NB_DATAFLASH_AREA]={
{0x00000000,0x00003FFF,FLAG_PROTECT_SET,0,"Bootstrap"},
{0x00004000,0x00007FFF,FLAG_PROTECT_CLEAR,0,"Environment"},
{0x00008000,0x00088000,FLAG_PROTECT_SET,0,"U-Boot"},
{0x00088001,0x0041FFFF,FLAG_PROTECT_CLEAR,0,"NULL"},
};
以上修改的分区要和上面的基地址配合.
#defineCFG_MONITOR_BASE(CFG_DATAFLASH_LOGIC_ADDR_CS0 0x8000)
#defineCFG_ENV_OFFSET0x4000
#defineCFG_ENV_ADDR(CFG_DATAFLASH_LOGIC_ADDR_CS0 CFG_ENV_OFFSET)
#defineCFG_ENV_SIZE0x4000
可以在原来的基础上修改,也可以把原来的屏蔽掉,然后自己写!
然后退回到u-boot的根目录.执行配置文件.
root@emboard:/workdir/at91sam9261/u-boot/u-boot-1.3.4#makedistclean

root@emboard:/workdir/at91sam9261/u-boot/u-boot-1.3.4#makeat91sam9261ek_config
...withenvironmentvariableinSPIDATAFLASHCS0
Configuringforat91sam9261ekboard...
root@emboard:/workdir/at91sam9261/u-boot/u-boot-1.3.4#make
.......好长的英文.....
arm-none-linux-gnueabi-objcopy--gap-fill=0xff-Osrecu-bootu-boot.srec
arm-none-linux-gnueabi-objcopy--gap-fill=0xff-Obinaryu-bootu-boot.bin
root@emboard:/workdir/at91sam9261/u-boot/u-boot-1.3.4#ls
apicommonexampleslib_genericlib_shmkconfigREADMEu-boot.map
api_examplesconfig.mkfslib_i386lib_sparcnand_splrules.mku-boot.srec
arm_config.mkCOPYINGi386_config.mklib_m68km68k_config.mknetsh_config.mk
avr32_config.mkcpuincludelib_microblazeMAINTAINERSnios2_config.mksparc_config.mk
blackfin_config.mkCREDITSlib_armlib_mipsMAKEALLnios_config.mkSystem.map
boarddisklib_avr32lib_niosMakefileonenand_ipltools
CHANGELOGdoclib_blackfinlib_nios2microblaze_config.mkpostu-boot
CHANGELOG-before-U-Boot-1.1.5driverslibfdtlib_ppcmips_config.mkppc_config.mku-boot.bin
这样就会生成上面的文件,特别是用红色标记的,u-boot.bin是可以写入到dataflash里面的文件,tools是在编译内核的时候"uImage"的工具.
我们把u-boot.bin烧入自己定义的dataflash位置,我的位置是0x8000.
烧入一级启动代码和u-boot后,打开串口终端,也就是debug口输出信息
可以看到u-boot启动了.
RomBOOT
U-Boot1.3.4(Apr92010-15:58:24)
DRAM:64MB
NAND:128MiB
DataFlash:AT45DB321
Nbpages:8192
PageSize:528
Size=4325376bytes
Logicaladdress:0xC0000000
Area0:C0000000toC0003FFF(RO)Bootstrap
Area1:C0004000toC0007FFFEnvironment
Area2:C0008000toC0088000(RO)U-Boot
Area3:C0088001toC041FFFFNULL
***Warning-badCRC,usingdefaultenvironment
In:serial
Out:serial
Err:serial
ERROR:resettingDM9000->notresponding
dm9000notfoundat0x30000000id:0x2b2a2928
DM9000:UndefinedIO-mode:0x3
MAC:00:00:00:00:00:00
couldnotestablishlink
Hitanykeytostopautoboot:0
WrongImageFormatforbootmcommand
ERROR:can'tgetkernelimage!
U-Boot>
到此为止,u-boot移植成功,下面开始移植linux内核了.
第四步:解压,编译linux内核
解压缩linux-2.6.24压缩文件:
为了生成uImage我们可以把先前设置的一个脚本文件修改为这样
root@emboard:/workdir/at91sam9261#ls
AT91Bootstrapcrosstoolfilesyetemkernelsetenv-9261u-boot
root@emboard:/workdir/at91sam9261#vimsetenv-9261
#!/bin/sbin/
echo"settheat91sam9261....."
exportPATH=$PATH:/workdir/at91sam9261/crosstool/arm-2008q1/bin/
exportPATH=$PATH:/workdir/at91sam9261/u-boot/u-boot-1.3.4/tools/
rm*~
也就是把u-boot生成的tools工具,用来编译内核.
root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24#ls
2.6.24-at91.patch.gzCOPYINGDocumentationMAINTAINERSREADMEarchcryptofsinitkernelmmsamplessecurityusr
2.6.24.at91.2-exp.patch.gzCREDITSKbuildMakefileREPORTING-BUGSblockdriversincludeipclibnetscriptssound
root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24#zcat2.6.24.at91.2-exp.patch.gz|patch-p1
root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24#zcat
2.6.24-at91.patch.gz|patch-p1
这样就打入了at91的补丁.
现在可以配置linux内核了.
root@emboard:/workdir/at91sam9261/kernel#ls
2.6.24.at91.2-exp.patch.gz2.6.24-at91.patch.gzlinux-2.6.24linux-2.6.24.tar.bz2yaffs2.tar.gz
root@emboard:/workdir/at91sam9261/kernel#cdlinux-2.6.24
root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24#ls
archCREDITSdriversinitkernelMakefilenetsamplessoundvmlinux
blockcryptofsipclibmmREADMEscriptsSystem.mapvmlinux.o
COPYINGDocumentationincludeKbuildMAINTAINERSModule.symversREPORTING-BUGSsecurityusr
进入linux内核目录:
root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24#vimMakefile
linux-2.6.24主目录下有个Makefile文件,打开,找到185行左右,修改
ARCH?=arm
CROSS_COMPILE?=arm-none-linux-gnueabi-
保存退出。at91sam9261
root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24#makedistclean
root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24#makeat91sam9261ek_defconfig
root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24#makemenuconfig
进入上面的选项配置:
将上图中的这2个选项要选中:
这样可以用EABI的交叉编译工具编译了.保存退出.
root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24#makeuImage
等待英文飘完,编译ok后,就可以得到内核image了.
....................
ImageName:Linux-2.6.24
Created:FriApr916:28:412010
ImageType:ARMLinuxKernelImage(uncompressed)
DataSize:1167608Bytes=1140.24kB=1.11MB
LoadAddress:20008000
EntryPoint:20008000
Imagearch/arm/boot/uImageisready
root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24#cdarch/arm/boot/
root@emboard:/workdir/at91sam9261/kernel/linux-2.6.24/arch/arm/boot#ls-l
total4652
drwxr-xr-x2rootroot40962008-01-2506:58bootp
drwxr-xr-x2rootroot40962010-04-0916:28compressed
-rwxr-xr-x1rootroot23944882010-04-0916:28Image
-rw-r--r--1rootroot13262008-01-2506:58install.sh
-rw-r--r--1rootroot27752008-01-2506:58Makefile
-rw-r--r--1rootroot11676722010-04-0916:28uImage
-rwxr-xr-x1rootroot11676082010-04-0916:28zImage
这样就可以把生成的uImage烧进nandflash的对应的位置了.
这里需要注意了,因为u-boot里面没有修改环境变量,也就是说,当u-boot启动后,输入printenv,看到的信息是基于jffs2的,所以在uboot启动后需要手动的去修改环境变量.
RomBOOT
U-Boot1.3.4(Apr92010-15:58:24)
DRAM:64MB
NAND:128MiB
DataFlash:AT45DB321
Nbpages:8192
PageSize:528
Size=4325376bytes
Logicaladdress:0xC0000000
Area0:C0000000toC0003FFF(RO)Bootstrap
Area1:C0004000toC0007FFFEnvironment
Area2:C0008000toC0088000(RO)U-Boot
Area3:C0088001toC041FFFFNULL
***Warning-badCRC,usingdefaultenvironment
In:serial
Out:serial
Err:serial
ERROR:resettingDM9000->notresponding
dm9000notfoundat0x30000000id:0x2b2a2928
DM9000:UndefinedIO-mode:0x3
MAC:00:00:00:00:00:00
couldnotestablishlink
Hitanykeytostopautoboot:0
U-Boot>
U-Boot>
U-Boot>
U-Boot>
U-Boot>
U-Boot>
U-Boot>printenv
bootargs=console=ttyS0,115200root=/dev/mtdblock0mtdparts=at91_nand:-(root)rwrootfstype=jffs2
bootcmd=cp.b0xC00420000x220000000x210000;bootm
bootdelay=3
baudrate=115200
Environmentsize:176/16892bytes
这个我们可以手动设置,具体命令可以去看下uboot的命令:
我的设置是这样的,这个只是来验证编译的内核是不是可以启动的.
U-Boot>setenvbootcmdnandread0x215000000x000000000x20000000\;bootm0x21500000
U-Boot>setenvbootargsmem=64Mconsole=ttyS0,115200root=/dev/mtdblock0
U-Boot>saveenv
SavingEnvironmenttodataflash...
然后重起板子,nandflash可能会有坏块,不成功的话,多重起几次.
以下是我的启动信息:
RomBOOT
U-Boot1.3.4(Apr92010-17:36:14)
DRAM:64MB
NAND:128MiB
DataFlash:AT45DB321
Nbpages:8192
PageSize:528
Size=4325376bytes
Logicaladdress:0xC0000000
Area0:C0000000toC0003FFF(RO)Bootstrap
Area1:C0004000toC0007FFFEnvironment
Area2:C0008000toC0088000(RO)U-Boot
Area3:C0088001toC041FFFFNULL
In:serial
Out:serial
Err:serial
ERROR:resettingDM9000->notresponding
dm9000notfoundat0x30000000id:0x2b2a2928
DM9000:UndefinedIO-mode:0x3
MAC:00:00:00:00:00:00
couldnotestablishlink
Hitanykeytostopautoboot:0
NANDread:device0offset0x0,size0x20000000
0bytesread:ERROR
##BootingkernelfromLegacyImageat21500000...
ImageName:Linux-2.6.24
ImageType:ARMLinuxKernelImage(uncompressed)
DataSize:1167608Bytes=1.1MB
LoadAddress:20008000
EntryPoint:20008000
VerifyingChecksum...OK
LoadingKernelImage...OK
OK
Startingkernel...
UncompressingLinux.............................................................................done,bootingthekernel.
Linuxversion2.6.24(root@emboard)(gccversion4.2.3(SourceryG Lite2008q1-126))#1FriApr916:28:34HKT2010
CPU:ARM926EJ-S[41069265]revision5(ARMv5TEJ),cr=00053177
Machine:AtmelAT91SAM9261-EK
Ignoringunrecognisedtag0x54410008
Memorypolicy:ECCdisabled,Datacachewriteback
Clocks:CPU198MHz,master99MHz,main18.432MHz
CPU0:DVIVTwrite-backcache
CPU0:Icache:16384bytes,associativity4,32bytelines,128sets
CPU0:Dcache:16384bytes,associativity4,32bytelines,128sets
Built1zonelistsinZoneorder,mobilitygroupingon.Totalpages:16256
Kernelcommandline:mem=64Mconsole=ttyS0,115200root=/dev/mtdblock0
AT91:96gpioirqsin3banks
PIDhashtableentries:256(order:8,1024bytes)
Console:colourdummydevice80x30
console[ttyS0]enabled
Dentrycachehashtableentries:8192(order:3,32768bytes)
Inode-cachehashtableentries:4096(order:2,16384bytes)
Memory:64MB=64MBtotal
Memory:62464KBavailable(2112Kcode,206Kdata,108Kinit)
Mount-cachehashtableentries:512
CPU:Testingwritebuffercoherency:ok
net_namespace:64bytes
NET:Registeredprotocolfamily16
SCSIsubsysteminitialized
usbcore:registerednewintecedriverusbfs
usbcore:registerednewintecedriverhub
usbcore:registerednewdevicedriverusb
NET:Registeredprotocolfamily2
Time:pitclocksourcehasbeeninstalled.
IProutecachehashtableentries:1024(order:0,4096bytes)
TCPestablishedhashtableentries:2048(order:2,16384bytes)
TCPbindhashtableentries:2048(order:1,8192bytes)
TCP:Hashtablesconfigured(established2048bind2048)
TCPrenoregistered
NetWinderFloatingPointEmulatorV0.97(doubleprecision)
ioschedulernoopregistered
ioscheduleranticipatoryregistered(default)
atmel_lcdfbatmel_lcdfb.0:backlightcontrolisnotavailable
atmel_lcdfbatmel_lcdfb.0:150KiBframebufferat23cc0000(mappedatffc00000)
atmel_lcdfbatmel_lcdfb.0:fb0:AtmelLCDCat0x00600000(mappedat80c000),irq21
atmel_usart.0:ttyS0atMMIO0xfefff200(irq=1)isaATMEL_SERIAL
RAMDISKdriverinitialized:16RAMdisksof8192Ksize1024blocksize
sscssc.1:AtmelSSCdeviceat0x810000(irq15)
dm9000EthernetDriver
dm9000:readwrongid0x2b2a2928
dm9000:readwrongid0x2b2a2928
dm9000:wrongid:0x2b2a2928
dm9000:notfound(-19).
Driver'sd'needsupdating-pleaseusebus_typemethods
NANDdevice:ManufacturerID:0xec,ChipID:0xf1(SamsungNAND128MiB3,3V8-bit)
AT91NAND:8-bit,SoftwareECC
Scanningdeviceforbadblocks
Creating3MTDpartitionson"at91_nand":
0x00000000-0x00400000:"Bootstrap"
0x00400000-0x04000000:"Partition1"
0x04000000-0x08000000:"Partition2"
atmel_spiatmel_spi.0:AtmelSPIControllerat0xfffc8000(irq12)
usbmon:debugfsisnotavailable
at91_ohciat91_ohci:AT91OHCI
at91_ohciat91_ohci:newUSBbusregistered,assignedbusnumber1
at91_ohciat91_ohci:irq20,iomem0x00500000
usbusb1:configuration#1chosenfrom1choice
hub1-0:1.0:USBhubfound
hub1-0:1.0:2portsdetected
InitializingUSBMassStoragedriver...
usbcore:registerednewintecedriverusb-storage
USBMassStoragesupportregistered.
udc:at91_udcversion3May2006
mice:PS/2mousedevicecommonforallmice
input:gpio-keysas/class/input/input0
ads7846spi0.2:touchscreen,irq29
input:ADS784xTouchscreenas/class/input/input1
rtc-at91sam9at91_rtt.0:rtccore:registeredat91_rttasrtc0
rtc-at91sam9at91_rtt.0:rtc0:SETTIME!
i2c/deventriesdriver
i2c-gpioi2c-gpio:usingpins39(SDA)and40(SCL)
at91sam9_wdt:invalidtimeout(mustbebetween1and16)
TCPcubicregistered
NET:Registeredprotocolfamily1
NET:Registeredprotocolfamily17
rtc-at91sam9at91_rtt.0:hctosys:unabletoreadthehardwareclock
Listofallpartitions:
1f004096mtdblock0(driver?)
1f0161440mtdblock1(driver?)
1f0265536mtdblock2(driver?)
Nofilesystemcouldmountroot,tried:ext2cramfsvfat
Kernelpanic-notsyncing:VFS:Unabletomountrootfsonunknown-block(31,0)
停在这里是因为没有文件系统,所以下一步就是制作根文件系统,也是最后一步!不过以上信息表明内核是启动起来了!内核的移植基本成功!
第五步:根文件系统的建立
一般采用busybox来制作根文件系统,这个busybox根据我的实验,和交叉编译工具的版本要配合好,不然制作出来的文件系统可能要有问题.
我的busybox版本和交叉编译工具的版本如下:
root@emboard:/workdir/at91sam9261/filesyetem#ls
busybox-1.11.2.tar.bz2
root@emboard:/workdir/at91sam9261/crosstool#ls
arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
我的这个例子是这个配置.
因为在上面的步骤已经设置好交叉编译工具了,所以剩下的工作就是来对busybox进行配置了.
root@emboard:/workdir/at91sam9261/filesyetem#tar-xjvfbusybox-1.11.2.tar.bz2
root@emboard:/workdir/at91sam9261/filesyetem#ls
busybox-1.11.2busybox-1.11.2.tar.bz2
root@emboard:/workdir/at91sam9261/filesyetem/busybox-1.11.2#ls
appletsConfig.indocsfindutilslibbbMakefilemiscutilsprocpsselinuxTODO
archconsole-toolse2fsprogsincludelibpwdgrpMakefile.custommodutilsREADMEshellTODO_config_nommu
archivalcoreutilseditorsinitLICENSEMakefile.flagsnetworkingrunitsysklogdutil-linux
AUTHORSdebianutilamplesINSTALLloginutilsMakefile.helpprintutilsscriptstestsuite
#Croot@emboard:/workdir/at91sam9261/filesyetem/busybox-1.11.2#vimMakefile
...................................................................................
ROSS_COMPILEspecifytheprefixusedforallexecutablesused
#duringcompilation.Onlygccandrelatedbin-utilecutables
#areprefixedwith$(CROSS_COMPILE).
#CROSS_COMPILEcanbesetonthecommandline
#makeCROSS_COMPILE=ia64-linux-
#AlternativelyCROSS_COMPILEcanbesetintheenvironment.
#DefaultvalueforCROSS_COMPILEisnottoprefixexecutables
#Note:SomearchitecturesassignCROSS_COMPILEintheirarch/*/Makefile
CROSS_COMPILE?=arm-none-linux-gnueabi-
#bbox:wemayhaveCONFIG_CROSS_COMPILER_PREFIXin.config,
#andithasnotbeenincludedyet...thususinganawkwardsyntax.
ifeq($(CROSS_COMPILE),)
CROSS_COMPILE:=$(shellgrep^CONFIG_CROSS_COMPILER_PREFIX.config2>/dev/null)
CROSS_COMPILE:=$(substCONFIG_CROSS_COMPILER_PREFIX=,,$(CROSS_COMPILE))
CROSS_COMPILE:=$(subst",,$(CROSS_COMPILE))
endif
#SUBARCHtellstheusermodebuildwhattheunderlyingarchis.Thatisset
#first,andifausermodebuildishappening,the"ARCH=um"onthecommand
#lineoverridesthesettingofARCHbelow.Ifanativebuildishappening,
#thenARCHisassigned,gettingwhatevervalueitgetsnormally,and
#SUBARCHissubsequentlyignored.
ifneq($(CROSS_COMPILE),)
SUBARCH:=$(shellecho$(CROSS_COMPILE)|cut-d--f1)
else
SUBARCH:=$(shelluname-m)
endif
SUBARCH:=$(shellecho$(SUBARCH)|sed-es/i.86/i386/-es/sun4u/sparc64/\
-es/arm.*/arm/-es/sa110/arm/\
-es/s390x/s390/-es/parisc64/parisc/\
-es/ppc.*/powerpc/-es/mips.*/mips/)
ARCH?=arm
...................................................................................
如果不想怎么麻烦,可以直接在命令行加上参数;
root@emboard:/workdir/at91sam9261/filesyetem/busybox-1.11.2#make
CROSS_COMPILE=arm-none-linux-gnueabi-ARCH=armmenuconfig
root@emboard:/workdir/at91sam9261/filesyetem/busybox-1.11.2#makeCROSS_COMPILE=arm-none-linux-gnueabi-ARCH=arm
root@emboard:/workdir/at91sam9261/filesyetem/busybox-1.11.2#makeCROSS_COMPILE=arm-none-linux-gnueabi-ARCH=arminstall
设置交叉编译工具.
BusyboxSettings--->
BuildOptions--->
[*]BuildBusyBoxasastaticbinary(nosharedlibs)
先就配置这个,先把最小系统跑起来!
现在可以直接编译了.
root@emboard:/workdir/at91sam9261/filesyetem/busybox-1.11.2#make
root@emboard:/workdir/at91sam9261/filesyetem/busybox-1.11.2#makeinstall
root@emboard:/workdir/at91sam9261/filesyetem/busybox-1.11.2#ls_install/
binlinuxrcsbinusr
可以看到生成了常用的命令等.
现在自己建立一个目录树,按照文件系统的要求:
为了方便,我把步骤都写成一个脚本了,如果对脚本不熟悉的话,可以按照脚本里面的步骤一步一步来.
进入你所要建立文件目录树的目录,下面是我的目录:
root@emboard:/workdir/at91sam9261/filesyetem#ls
busybox-1.11.2busybox-1.11.2.tar.bz2
root@emboard:/workdir/at91sam9261/filesyetem#vimmk_roofs
#!/bin/bash
mkdirrootfs
cdrootfs
mkdirbootetchomeproctmpvardevmntrootsys
cdetc
mkdirinit.d
cd..
cddev
mknodconsolec51
mknodnullc13
cd../..
ls
上面的基本的文件夹,还需要对etc下面进行修改!
root@emboard:/workdir/at91sam9261/filesyetem#.mk_rootfs
运行这个脚本
root@emboard:/workdir/at91sam9261/filesyetem#ls
busybox-1.11.2busybox-1.11.2.tar.bz2mk_roofsrootfs
建立lib文件,然后将交叉编译工具的lib文件复制过来
root@emboard:/workdir/at91sam9261/filesyetem/rootfs#mkdirlib
root@emboard:/workdir/at91sam9261/filesyetem/rootfs#cp-a../../crosstool/arm-2008q1/arm-none-linux-gnueabi/libc/armv4t/lib/*lib/
root@emboard:/workdir/at91sam9261/filesyetem/rootfs#cdlib/
root@emboard:/workdir/at91sam9261/filesyetem/rootfs/lib#ls
ld-2.5.solibcrypt-2.5.solibm.so.6libnss_hesiod-2.5.solibresolv-2.5.so
ld-linux.so.3libcrypt.so.1libnsl-2.5.solibnss_hesiod.so.2libresolv.so.2
libanl-2.5.solibc.so.6libnsl.so.1libnss_nis-2.5.solibrt-2.5.so
libanl.so.1libdl-2.5.solibnss_compat-2.5.solibnss_nisplus-2.5.solibrt.so.1
libBrokenLocale-2.5.solibdl.so.2libnss_compat.so.2libnss_nisplus.so.2libSegFault.so
libBrokenLocale.so.1libgcc_s.solibnss_dns-2.5.solibnss_nis.so.2libthread_db-1.0.so
libc-2.5.solibgcc_s.so.1libnss_dns.so.2librofile.solibthread_db.so.1
libcidn-2.5.solibm-2.5.solibnss_files-2.5.solibpthread-2.5.solibutil-2.5.so
libcidn.so.1libmemusage.solibnss_files.so.2libpthread.so.0libutil.so.1
然后将busybox制作的文件复制过来.
root@emboard:/workdir/at91sam9261/filesyetem/rootfs/lib#cd..
root@emboard:/workdir/at91sam9261/filesyetem/rootfs#ls
bootdevetchomelibmntprocrootsyssysconfigtmpvar
root@emboard:/workdir/at91sam9261/filesyetem/rootfs#cp-a../busybox-1.11.2/_install/*.
root@emboard:/workdir/at91sam9261/filesyetem/rootfs#ls
binbootdevetchomeliblinuxrcmntprocrootsbinsystmpusrvar
root@emboard:/workdir/at91sam9261/filesyetem/rootfs#cdusr/
root@emboard:/workdir/at91sam9261/filesyetem/rootfs/usr#ls
binsbin
可见文件已经复制过来了!
然后进入etc目录
root@emboard:/workdir/at91sam9261/filesyetem/rootfs/etc#viminittab
下面是内容:
::sysinit:/etc/init.d/rcS
::respawn:/bin/ash
保存退出.
然后进入init.d
root@emboard:/workdir/at91sam9261/filesyetem/rootfs/etc#cdinit.d/
root@emboard:/workdir/at91sam9261/filesyetem/rootfs/etc/init.d#vimrcS
下面是内容:
#!/bin/sh
echo"#-----Start/etc/init.d/rcS"
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask022
exportPATHrunlevelprevlevel
echo"***********************************************"
echo"StartARM....."
echo"20100410"
echo"microcreat"
echo"***********************************************"
然后保存,退出.
root@emboard:/workdir/at91sam9261/filesyetem#cd../../..
root@emboard:/workdir/at91sam9261/filesyetem#rmrootfs.cramfs
root@emboard:/workdir/at91sam9261/filesyetem#mkcramfsrootfsrootfs.cramfs
Directorydata:7164bytes
Everything:2096kilobytes
Superblock:76bytes
CRC:85fce0bb
root@emboard:/workdir/at91sam9261/filesyetem#ls
busybox-1.11.2busybox-1.11.2.tar.bz2mk_roofsrootfsrootfs.cramfs
这样就生成了cramfs"rootfs.cramfs"文件!
按照分配地址写入nandflash,重起板子,从终端就可以看到信息:
RomBOOT
U-Boot1.3.4(Apr92010-17:36:14)
DRAM:64MB
NAND:128MiB
DataFlash:AT45DB321
Nbpages:8192
PageSize:528
Size=4325376bytes
Logicaladdress:0xC0000000
Area0:C0000000toC0003FFF(RO)Bootstrap
Area1:C0004000toC0007FFFEnvironment
Area2:C0008000toC0088000(RO)U-Boot
Area3:C0088001toC041FFFFNULL
In:serial
Out:serial
Err:serial
ERROR:resettingDM9000->notresponding
dm9000notfoundat0x30000000id:0x2b2a2928
DM9000:UndefinedIO-mode:0x3
MAC:00:00:00:00:00:00
couldnotestablishlink
Hitanykeytostopautoboot:0
NANDread:device0offset0x0,size0x20000000
0bytesread:ERROR
##BootingkernelfromLegacyImageat21500000...
ImageName:Linux-2.6.24
ImageType:ARMLinuxKernelImage(uncompressed)
DataSize:1165092Bytes=1.1MB
LoadAddress:20008000
EntryPoint:20008000
VerifyingChecksum...OK
LoadingKernelImage...OK
OK
Startingkernel...
UncompressingLinux.............................................................................done,bootingthekernel.
Linuxversion2.6.24(root@emboard)(gccversion4.2.3(SourceryG Lite2008q1-126))#1SatApr1009:46:40HKT2010
CPU:ARM926EJ-S[41069265]revision5(ARMv5TEJ),cr=00053177
Machine:AtmelAT91SAM9261-EK
Ignoringunrecognisedtag0x54410008
Memorypolicy:ECCdisabled,Datacachewriteback
Clocks:CPU198MHz,master99MHz,main18.432MHz
CPU0:DVIVTwrite-backcache
CPU0:Icache:16384bytes,associativity4,32bytelines,128sets
CPU0:Dcache:16384bytes,associativity4,32bytelines,128sets
Built1zonelistsinZoneorder,mobilitygroupingon.Totalpages:16256
Kernelcommandline:mem=64Mnoinitrdconsole=ttyS0,115200init=nuxrcroot=/dev/mtdblock2rootfstype=cramfs
AT91:96gpioirqsin3banks
PIDhashtableentries:256(order:8,1024bytes)
Console:colourdummydevice80x30
console[ttyS0]enabled
Dentrycachehashtableentries:8192(order:3,32768bytes)
Inode-cachehashtableentries:4096(order:2,16384bytes)
Memory:64MB=64MBtotal
Memory:62464KBavailable(2112Kcode,206Kdata,108Kinit)
Mount-cachehashtableentries:512
CPU:Testingwritebuffercoherency:ok
net_namespace:64bytes
NET:Registeredprotocolfamily16
SCSIsubsysteminitialized
usbcore:registerednewintecedriverusbfs
usbcore:registerednewintecedriverhub
usbcore:registerednewdevicedriverusb
NET:Registeredprotocolfamily2
Time:pitclocksourcehasbeeninstalled.
IProutecachehashtableentries:1024(order:0,4096bytes)
TCPestablishedhashtableentries:2048(order:2,16384bytes)
TCPbindhashtableentries:2048(order:1,8192bytes)
TCP:Hashtablesconfigured(established2048bind2048)
TCPrenoregistered
NetWinderFloatingPointEmulatorV0.97(doubleprecision)
ioschedulernoopregistered
ioscheduleranticipatoryregistered(default)
atmel_lcdfbatmel_lcdfb.0:backlightcontrolisnotavailable
atmel_lcdfbatmel_lcdfb.0:150KiBframebufferat23cc0000(mappedatffc00000)
atmel_lcdfbatmel_lcdfb.0:fb0:AtmelLCDCat0x00600000(mappedat80c000),irq21
atmel_usart.0:ttyS0atMMIO0xfefff200(irq=1)isaATMEL_SERIAL
RAMDISKdriverinitialized:16RAMdisksof8192Ksize1024blocksize
sscssc.1:AtmelSSCdeviceat0x810000(irq15)
dm9000EthernetDriver
dm9000:readwrongid0x2b2a2928
dm9000:readwrongid0x2b2a2928
dm9000:wrongid:0x2b2a2928
dm9000:notfound(-19).
Driver'sd'needsupdating-pleaseusebus_typemethods
NANDdevice:ManufacturerID:0xec,ChipID:0xf1(SamsungNAND128MiB3,3V8-bit)
AT91NAND:8-bit,SoftwareECC
Scanningdeviceforbadblocks
Creating4MTDpartitionson"at91_nand":
0x00000000-0x00800000:"Bootstrap"
0x00800000-0x01c00000:"ramdisk"
0x01400000-0x03200000:"cramfs"
0x04000000-0x08000000:"file"
atmel_spiatmel_spi.0:AtmelSPIControllerat0xfffc8000(irq12)
usbmon:debugfsisnotavailable
at91_ohciat91_ohci:AT91OHCI
at91_ohciat91_ohci:newUSBbusregistered,assignedbusnumber1
at91_ohciat91_ohci:irq20,iomem0x00500000
usbusb1:configuration#1chosenfrom1choice
hub1-0:1.0:USBhubfound
hub1-0:1.0:2portsdetected
InitializingUSBMassStoragedriver...
usbcore:registerednewintecedriverusb-storage
USBMassStoragesupportregistered.
udc:at91_udcversion3May2006
mice:PS/2mousedevicecommonforallmice
input:gpio-keysas/class/input/input0
ads7846spi0.2:touchscreen,irq29
input:ADS784xTouchscreenas/class/input/input1
rtc-at91sam9at91_rtt.0:rtccore:registeredat91_rttasrtc0
rtc-at91sam9at91_rtt.0:rtc0:SETTIME!
i2c/deventriesdriver
i2c-gpioi2c-gpio:usingpins39(SDA)and40(SCL)
at91sam9_wdt:invalidtimeout(mustbebetween1and16)
TCPcubicregistered
NET:Registeredprotocolfamily1
NET:Registeredprotocolfamily17
rtc-at91sam9at91_rtt.0:hctosys:unabletoreadthehardwareclock
VFS:Mountedroot(cramfsfilesystem)readonly.
Freeinginitmemory:108K
initstarted:BusyBoxv1.11.2(2010-04-1010:18:23HKT)
startingpid735,tty'':'/etc/init.d/rcS'
#-----Start/etc/init.d/rcS
***********************************************
StartARM.....
20100410
microcreat
***********************************************
startingpid736,tty'':'/bin/ash'
/bin/ash:can'taccesstty;jobcontrolturnedoff
#ls
bindevhomelinuxrcprocsbintmpvar
bootetclibmntrootsysusr
#cd/
#ls
bindevhomelinuxrcprocsbintmpvar
bootetclibmntrootsysusr
#cdetc/
#ls
init.dinittab
可以看到内核基本已经启动起来!但是这个只是最基本的!还需要进一步完善!不过这样可以给一个大致的认识!至少liunx已经跑起来了!以后的工作就是在这个上面去进行了!
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/dianqi/article-21703-1.html
只是要更加快一点步伐
拉起了我的手
犯我中华大国