嵌入式Linux之我行 史上最牛最详细的uboot移植,不看别后悔
UBOOT移植1
移植u-boot-2011.03到S3C2440(utu2440)方法与步骤###1. 配置和初步编译摘要:在2011年的时候,本人把u-boot-2011.03成功移植到了S3C2440(utu2440开发板)上。
通过这次移植使自己对u-boot有了较深刻的理解并掌握了u-boot 的移植。
对于未移植过u-boot的人来说,可能觉得很神秘,甚至觉得很难。
实际上,从整个移植过程来看,并未想像中那么难。
如果你接触过嵌入式linux的开发,我觉得移植u-boot并不是难事,至少没想象中的难。
reille博客作为技术分享、技术交流的个人博客,把自己移植u-boot-2011.03的过程、遇到的问题及解决方法作为一个系列专题分享出来。
希望对正在移植u-boot的人有用。
本节主要介绍u-boot-2011.03的配置和初步编译。
开发环境:主机:Window XP SP2;linux:VMware7.01+ubuntu9.10;目标板:扬创utu2440-F开发板交叉编译器:arm-linux-gcc4.3.2(一开始用的是编译内核的版本arm-linux-gcc3.4.1,但出现了软浮点问题,于是换成了现在用的版本,当然本人编译内核的时候还是用3.4.1版本)。
1. 下载uboot源码:u-boot-2011.03本来想移植最新版本u-boot-2011.06,但见其还在修改中,故改为移植u-boot-2011.03,其源码可从如下地址中下载:ftp://ftp.denx.de/pub/u-boot/ 2. 裁减和配置2.1 裁减:1). 删除u-boot-2011.03/arch目录下除arm目录外的所有目录;2). 删除u-boot-2011.03/arch/arm/cpu目录下除arm920tmulu外的所有目录;3). 删除u-boot-2011.03/arch/arch/arm/cpu/arm920t目录下除s3c24x0目录外的所有目录,注:文件不要删;4). 删除u-boot-2011.03/arch/arm/include/asm目录下除arch-s3c24x0目录外的所有arch-xxxx目录,注:文件不要删;5). 删除u-boot-2011.03/board目录下除samsung目录外的所有目录;6). 删除u-boot-2011.03/board/samsung目录下除smdk2410目录外的所有目录;7). 删除u-boot-2011.03/include/configs目录下除smdk2410.h文件外的所有头文件。
嵌入式μCLinux系统移植(全文)
嵌入式μCLinux系统移植XX:1007-9416(20XX)04-0086-01嵌入式Linux系统在开发过程中需要对Linux内核进行重新定制,所以熟悉内核配置、编译和移植是非常重要的。
掌握一定的Linux内核的内容,是对Linux进行手动内核移植前必须要做的。
1 Linux内核移植Linux内核移植,通俗讲马上内核由一种硬件平台移植到另一种硬件平台上运行的方式。
虽然大部分的处理器和硬件平台,嵌入式Linux系统都可以支持,但最好还是以自己定制的硬件板为主,移植工作也可通过硬件平台的变化进行调整。
本文以Linux2.6.32.4版本内核为例,过程是如何将其移植到RM内核S3C2440处理器上,该处理器是Smsung公司出产的。
1.1 内核修改(1)解压内核源码。
加压命令:tr jxvf linux-2.6.32.4.tr.bz2。
(2)修改Mkefile。
Mkefile是贯穿整Linux内核的生命线,并以此完成编译和链接。
具体过程为:内核源码目录――进入一级目录(通过编译工具)――找到Mkefile文件――修改相关变量。
(3)修改目标板输入时钟。
内核源目录――找到文件rch/rm/mch-s3c2440/mch-smdk2440.c并打开(通过编译工具)――找到函数mini2440_mp_io(void)的实现代码:s3c24xx_init_clocks(12000000)。
此代码单位是Hz,是目标板中处理器晶振的频率的意思。
依照目标板实际晶振震荡器的大小进行修改,本文以12MHz晶振为例。
(4)修改MTD分区。
MTD驱动程序在Linux下,其接口分为用户模块和硬件模块两种。
将MTD子系统编译到内核中,是为了访问特定的闪存设备,并在它上面放置文件系统,这包括选择适当的MTD硬件和用户模块。
MTD子系统就目前而言,支持绝大多数的闪存设备,且不断的有更多的驱动程序添加进来,以用于不同的闪存芯片。
Linux系统移植之—uboot移植,你们要的uboot终于来了,堪称精品
Linux系统移植之—uboot移植,你们要的uboot终于来了,堪称精品作为一名过来人,uboot、kernel对每个学linux的来说都有很深的情谊,因为它们是一个系统跑起来的最基础,每个学linux的都会首先接触到。
而它们本身就是一个精美的小系统,里边代码所体现的逻辑、算法以及每个绝妙的C知识点都让你沉醉其中。
uboot 属于bootloader的一种,是用来引导启动内核的,它的最终目的就是,从flash中读出内核,放到内存中,启动内核。
具体内容如下:1 uboot 的介绍及系统结构1.1 uboot 介绍1.2 获取 uboot1.3 uboot 体系结构1.3.1 uboot 目录结构2 uboot 的启动过程及工作原理2.1 启动模式介绍2.2 阶段 1 介绍2.2.1 定义入口2.2.2 设置异常向量2.2.3 设置 CPU 的模式为 SVC 模式2.2.4 关闭看门狗2.2.5 禁掉所有中断2.2.6 设置以 CPU 的频率2.2.7 设置 CP152.2.8 配置内存区控制寄存器2.2.9 安装 UBOOT 使的栈空间2.2.10 BSS 段清 02.2.11 搬移 Nand Flash 代码2.2.12 进入 C 代码部分2.3 阶段 2 的 C 语言代码部分2.3.1 调用一系列的初始化函数2.3.2 初始化网络设备2.3.3 进入主 UBOOT 命令行2.4 代码搬运3 uboot 的移植过程3.1 环境3.2 步骤3.2.1 修改 Makefile3.2.2 在 board 子目录中建立 crane2410 3.2.3 在 include/configs/中建立配置头文件3.2.4 指定交叉编译工具的路径3.2.5 测试编译能否成功3.2.6 修改 lowlevel_init.S 文件2.9 UBOOT 的 Nand Flash 移植3.2.8 重新编译 uboot3.2.9 把 uboot 烧入 flash4.2 常用命令使用说明4.2.1 askenv(F)在标准输入(stdin)获得环境变量。
u-boot移植心得
几经艰辛,终于基本完成了u-boot在s3c44b0的移植工作,在些记录一下在移植过程中所碰到的困难和解决方法(一些心得),作为日后参考之用,也希望能够帮到其它有需要的人^_^。
1.来由:在我搞完ucos后(本来我是想学uclinux的,不过在对系统一无所知的情况下,还是先学一下ucos比较实际^_^,从中也可以对系统有个清晰的概念),我意识到要搞系统的话一个功能强大的bootloader是必不可少的,而我的板上自带的是armboot(其实我个人觉得应用在ARM上的话armboot已经足够了,毕竟u-boot也是从armboot中发展过来的,纯属个人意见),如果我的板上自带光盘有已经移植好的armboot源代码供我参考的话,我想我也不会花这么多时间去搞u-boot,可恨的是我的光盘上只有armboot.bin这个二进制文件,而没有源文件,没办法,我下定主意自己搞一个,考虑了一番后我选择了u-boot,毕竟参考资料相对比较多,再我学完u-boot后再回头看armboot,简直是一个炉里出的饼,这是后话。
2.准备:说是容易,做起来却挺难。
因为编译u-boot要在linux环境下,而不能在我们平时所熟悉的ads下那么直观。
首先要建立好交叉编译环境,这个交叉编译环境可以自己来做,不过完全没必要,而且难度也挺大,一般是下载人家编译好的工具。
我刚开始在这里就郁闷了很久,现在会了以后觉得原来就是这么简单,在些我把方法说清楚,希望不会再有人为这个问题郁闷了^_^:1)在网上下载一个u-boot源代码,我用的是1.1.2版本的,最新的应该是1.1.4的吧,其实差不多,那就像我那样下载一个1.1.2版本的吧。
把源文件解压,这个应该不用说了吧,学过linux的人应该会,不会的话我想你继续做下去也困难,那就先装个linux用下吧(我用的是RedHat的,哦对了,编译程序是需要gcc 编译器的,所以安装方式一定要选择工作站哦^_^)。
ARM的嵌入式Linux移植体验
ARM的嵌入式Linux移植体验之BootLoader1BootLoader指系统启动后,在操作系统内核运行之前运行的一段小程序。
通过BootLoader,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。
因此,在嵌入式世界里建立一个通用的 BootLoader 几乎是不可能的。
尽管如此,我们仍然可以对BootLo ader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。
BootLoader 的实现依赖于CPU的体系结构,因此大多数 BootLoader 都分为stage1 和stage2 两大部分。
依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在 stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。
而stage2 则通常用C 语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。
BootLoader 的 stage1 通常包括以下步骤:·硬件设备初始化;·为加载Boot Loader的stage2准备 RAM 空间;·拷贝Boot Loader的stage2 到RAM空间中;·设置好堆栈;·跳转到 stage2 的 C 入口点。
Boot Loader的stage2通常包括以下步骤:·初始化本阶段要使用到的硬件设备;·检测系统内存映射(memory map);·将kernel 映像和根文件系统映像从flash上读到 RAM 空间中;·为内核设置启动参数;·调用内核。
本系统中的BootLoader参照韩国mizi公司的vivi进行修改。
1.开发环境我们购买了武汉创维特信息技术有限公司开发的具有自主知识产权的应用于嵌入式软件开发的集成软、硬件开发平台ADT(ARM Development Tools)它为基于ARM 核的嵌入式应用提供了一整套完备的开发方案,包括程序编辑、工程管理和设置、程序编译、程序调试等。
uuboot 移植流程
uuboot 移植流程U-Boot 移植流程介绍U-Boot是一个开源的引导加载程序,常用于嵌入式系统中。
移植U-Boot可以将其适配到不同的硬件平台上,以满足特定需求。
本文将详细说明U-Boot移植的流程。
准备工作1.硬件选型:根据项目需求,选择适合的硬件平台。
2.获取源代码:从U-Boot官方网站或仓库下载最新版本的源代码。
3.安装交叉编译工具链:根据目标硬件平台的指令集架构,选择合适的交叉编译工具链,并进行安装。
4.了解目标硬件平台:熟悉目标硬件平台的架构、引导方式、存储器布局等相关信息。
移植流程1.配置编译环境:设置交叉编译工具链的环境变量,以确保正确编译U-Boot源代码。
2.配置U-Boot:修改U-Boot源代码中的配置文件,根据目标硬件平台的特性和需求进行相应配置。
–配置目标硬件平台的处理器类型、存储器布局等基本信息。
–配置启动方式,如通过网络(TFTP)或存储介质(SD卡、NAND Flash)等进行启动。
–配置启动流程,如引导加载程序的加载顺序、启动脚本等。
3.添加适配代码:根据目标硬件平台的需求,编写适配代码,包括引导加载程序和设备驱动等。
–引导加载程序:为目标硬件平台选择合适的程序入口点,配置启动参数,加载适配的设备驱动等。
–设备驱动:根据目标硬件平台的外设,编写相应的设备驱动代码,以支持外设的初始化和操作。
4.编译U-Boot:使用交叉编译工具链,编译修改后的U-Boot源代码。
–执行make clean清除之前的编译结果。
–执行make命令编译U-Boot源代码。
5.烧录和运行:将编译生成的U-Boot镜像烧录到目标硬件平台,并进行测试。
–根据目标硬件平台的烧录方式(串口、JTAG等),将U-Boot镜像烧录到目标设备。
–启动目标设备,观察U-Boot的启动信息是否正常输出,检查设备驱动是否正常加载。
6.调试和优化:根据实际情况,进行U-Boot的调试和性能优化。
–使用调试工具进行调试,如调试器、串口打印信息等。
(精)嵌入式Linux的U-boot系统启动过程.doc
嵌入式Linux的U-boot系统启动过程本章基于Intel公司的pxa270芯片分析U-Boot的工作机制,介绍了嵌入式Linux交叉开发工具ELDK(Embedded Linux Development Kit),说明配置安装U-Boot到特定主板、交叉编译调试Linux的方法,分析了U-Boot的构架。
目录[隐藏]∙ 1 BootLoad启动方式o 1.1 网络启动方式o 1.2 2.磁盘启动方式o 1.3 3.Flash启动方式∙ 2 U-Boot介绍o 2.1 U-Boot功能介绍o 2.2 U-Boot安装o 2.3 U-Boot命令介绍o 2.4 U-Boot环境变量o 2.5 U-Boot脚本o 2.6 U-Boot单独应用程序o 2.7 位图支持∙ 3 2 ELDK工具介绍o 3.1 下载与编译o 3.2 建立开发系统o 3.3 编译安装Linux内核o 3.4 启动嵌入式Linuxo 3.5 Flash文件系统o 3.6 根文件系统的设计与编译o 3.7 覆盖层文件系统o 3.8 调试▪ 3.8.1 (1)U-Boot的调试▪ 3.8.2 (2)Linux内核调试▪ 3.8.3 (3)远程调试应用程序BootLoad启动方式Bootloader的主要功能是引导操作系统启动,开放源代码的BootLoader种类很多,常用的BootLoader的功能说明如表1所示。
表1 常用BootLoader的功能说明网络启动方式这种方式开发板不需要配置较大的存储介质,跟无盘工作站有点类似。
但是使用这种启动方式之前,需要把Bootloader安装到板上的EPROM或者Flash中。
Bootloader通过以太网接口远程下载Linux内核映像或者文件系统。
第4章介绍的交叉开发环境就是以网络启动方式建立的。
这种方式对于嵌入式系统开发来说非常重要。
使用这种方式也有前提条件,就是目标板有串口、以太网接口或者其他连接方式。
uboot2009移植
嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一)(2009-11-27 10:46)分类:Bootloader移植篇嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。
一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。
如有错误之处,谢请指正。
共享资源,欢迎转载:一、移植环境主机:VMWare--Fedora 9开发板:Mini2440--64MB Nand,Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.2.tgzu-boot:u-boot-2009.08.tar.bz2二、移植步骤本次移植的功能特点包括:支持Nand Flash读写支持从Nor/Nand Flash启动支持CS8900或者DM9000网卡支持Yaffs文件系统支持USB下载(还未实现)1.了解u-boot主要的目录结构和启动流程,如下图。
u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;u-boot的stage2代码通常放在lib_xxxx/board.c文件中,他用C语言写成。
各个部分的流程图如下:2. 建立自己的开发板项目并测试编译。
目前u-boot对很多CPU直接支持,可以查看board目录的一些子目录,如:board/samsung/目录下就是对三星一些ARM处理器的支持,有smdk2400、smdk2410和smdk6400,但没有2440,所以我们就在这里建立自己的开发板项目。
1)因2440和2410的资源差不多,主频和外设有点差别,所以我们就在board/samsung/下建立自己开发板的项目,取名叫my2440#tar -jxvf u-boot-2009.08.tar.bz2 //解压源码#cd u-boot-2009.08/board/samsung/ //进入目录#mkdir my2440 //创建my2440文件夹2)因2440和2410的资源差不多,所以就以2410项目的代码作为模板,以后再修改#cp -rf smdk2410/* my2440/ //将2410下所有的代码复制到2440下#cd my2440 //进入my2440目录#mv smdk2410.c my2440.c //将my2440下的smdk2410.c改名为my2440.c#cd ../../../ //回到u-boot根目录#cp include/configs/smdk2410.h include/configs/my2440.h//建立2440头文件#gedit board/samsung/my2440/Makefile //修改my2440下Makefile的编译项,如下:COBJS :=my2440.o flash.o //因在my2440下我们将smdk2410.c改名为my2440.c3)修改u-boot跟目录下的Makefile文件。
linux 内核启动过程移植uboot和linux内核
移植UbootLinux整理由于按照NFS不小心,Ubuntu罢工,不得以,自己重新把移植uboot和linux工作重新做一次,权当复习.自己移植的是Uboot-1.2.0和linux-2.6.14.1 到恒丰锐科(hfrk) 2410 的板子.用busybox-1.2.0 和cramfs-1.1 制作camfs.该板子没有nor,只要64M的nand.1.==============uboot按照编译器=====================sudo tar -jxvf arm-linux-gcc-3.3.2.tar.bz2 -C ///for uboot have hard float .2.=========uboot1.2.0 移植=======================见附件ubootclay2010Feb05.patch .以下是移植说明.修改根目录的Makefile的cross compilerCROSS_COMPILE ?= /usr/local/arm/3.3.2/bin/arm-linux-修改/home/clay/u-boot-1.2.0/cpu/arm920t/config.mk 见7(13)屏蔽"-msoft-float" 不要浮点,也可以自己编译带软件浮点的编译器.make distclean//清除上一次的配置make smdk2410_config //选用2410 默认配置make //编译,在去掉浮点后,能编译通过修改/home/clay/u-boot-1.2.0/board/smdk2410/lowlevel_in it.S //2410 DDR时序配置/home/clay/u-boot-1.2.0/cpu/arm920t/start.S // 添加copy uboot到ddr的代码,注意copy 的页面数量要比编译出来的uboot.bin大/home/clay/u-boot-1.2.0/include/configs/smdk2410.h //修改nand boot的配置,nand命令,uboot启动kernel命令,传递给kernel的参数,串口波特率等等for nand cmd & load CONFIG_BOOTARGS CONFIG_BOOTCOMMAND/home/clay/u-boot-1.2.0/include/linux/mtd/nand_ids .h //添加nand_flash_ids nand flash id/home/clay/u-boot-1.2.0/lib_arm/board.c //可以添加一些打印信息,可以不添加/home/clay/u-boot-1.2.0/common/cmd_boot.c //uboot的go 没有带CUP的id参数,所以添加,见7(9)/home/clay/u-boot-1.2.0/drivers/nand/nand.c //for nand 的操作用到的具体的读写见7(12)重新编译,可以进入到uboot的命令界面3.======================ubuntu tftp =======================$ sudo apt-get install xinetd tftpd tftp失败,vsftp也不能tftp访问,见7(11)以下是成功的方法sudo apt-get install tftpd-hpa tftp-hpasudo update-rc.d -f tftpd-hpa removeclay@pan:/home$ sudo mkdir tftpclay@pan:/home$ sudo chmod 777 -R tftp/clay@pan:/home$ sudo chown -R nobody tftp/sudo apt-get install xinetdsudo gedit /etc/xinetd.d/tftp添加以下server = /usr/sbin/in.tftpd#server_args = /home/tftpdisable = noserver_args = -s /home/tftpd -p -c -U 077 -u tftpd #//表示tftp操作目录在/home/tftpd上log_on_success = PID HOST DURATIONlog_on_failure = HOST}sudo gedit /etc/inetd.conf 屏蔽以下语句#tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot如果tftp不能工作,执行/etc/init.d/xinetd restart 即可到这里,在uboot 可以用tftp 的命令下载zImage等,用go可以执行4========================kernel=================== ======移植linux-2.6.14.1内核,见附件linuxclay2010feb04.patch.修改arch/arm/mach-s3c2410/devs.c //添加nand 分区structdrivers/mtd/nand/s3c2410.c //禁止nand ecc ,因为uboot和kernel的ecc不一样linux/arch/arm/mach-s3c2410/mach-smdk2410.c,smdk24 10_devices添加&s3c_device_nand,让系统开机初始化nand,能从中读取cramfs参照arch/arm/configs/s3c2410_defconfig 配置内核,也可以用make menuconfig然后在以下步骤添加-Boot options :noinitrd root=/dev/mtdblock2 init=/linuxrc devfs=mount console=ttySAC0,115200same as uboot-file system - network file system - NFS-miscellaneous filesystem-cramfsmake (zImage)//可以成功用修改后的go运行,只是找不到rootfs制作bootm引导的uImagesudo cp ../u-boot-1.2.0/tools/mkimage /usr/local/bin/gedit arch/arm/boot/Makefile------------------------------------quiet_cmd_uimage = UIMAGE $@cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \-C none -a $(ZRELADDR) -e 0x30008040 \ #//使用bootm,原因见7(6)的解释-n 'Linux-$(KERNELRELEASE)' -d $< $@-----------------------------------------------make uImage----tftp 0x30008000 uImagenand erase 0x00040000nand write 0x30008000 0x00040000 0x001c00005=================cramfs busybox==================添加zlib,因为ubuntu没带,见7(17)$tar -xvzf zlib-1.2.3.tar.gz$cd zlib-1.2.3.tar.gz$./configure$make$sudo make installcramfs-1.1/: makemakemake install 的到制作cramfs的工具的执行程序编译busybox//最好和内核用一样的编译器,见7(16)menuconfig-设置compiler /usr/local/arm/3.4.1/bin/arm-linux--install option don't use /usr& set out file path-general CONFIG_FEATURE_SUID=y ???make 后,在指定的目录的到bin sbin linuxrc,他们都是busybox的链接6====================rootfs======================在编译出来busybox 目录下clay@pan:~/rootfs$ mkdir dev etc home lib mnt proc sys tmp var usr//bin sbin no needrm linuxrc//编译出来的这文件不能执行,不合适,所以要修改,见7(17)gedit linuxrc----------------------------------------------#!/bin/shecho "mount /etc as ramfs"/bin/mount -f -t cramfs -o remount,ro /dev/bon/2 //bin/mount -t ramfs ramfs /var/bin/mkdir -p /var/tmp/bin/mkdir -p /var/run/bin/mkdir -p /var/log/bin/mkdir -p /var/lock/bin/mkdir -p /var/empty#/bin/mount -t usbdevfs none /proc/bus/usbexec /sbin/init----------------------------------------------//添加rcS 文件-gedit rcS-------------------------------------------------- ---------------------------------#!/bin/sh/bin/mount -a-------------------------------------------------- ---------------------------------chmod 775 linuxrc rcSclay@pan:~/rootfs$ mkdir -p etc/init.d/clay@pan:~/rootfs$ mv rcS etc/init.d/clay@pan:~/etc$ gedit inittab//添加inittab以下内容-------------------------------------------------# This is run first except when booting::sysinit:/etc/init.d/rcS# Start an "askfirst" shell on the console#::askfirst:-/bin/bash::askfirst:-/bin/sh# Stuff to do when restarting the init process::restart:/sbin/init# Stuff to do before rebooting::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -r-------------------------------------------------gedit fstab//添加以下内容-------------------------------------------------- ------------none /proc proc defaults 0 0none /dev/pts devpts mode=0622 0 0tmpfs /dev/shm tmpfs defaults 0 0-------------------------------------------------- --------clay@pan:~/rootfs$ chmod 777 inittab fstabclay@pan:~/rootfs$ mv fstab etc/clay@pan:~/rootfs$ mv inittab etc/clay@pan:~/rootfs$ cd dev/clay@pan:~/rootfs/dev$ sudo mknod console c 5 1[sudo] password for clay:clay@pan:~/rootfs/dev$ sudo mknod null c 1 3clay@pan:~$ gedit libcopy.sh//制作一个sh程序,去复制编译器中动态库, ------------------------------------# cd /usr/local/arm/3.4.1/arm-linux/lib/ //到编译内核的编译器目录里for file in libc libcrypt libdl libm libpthread libresolv libutildocp $file-*.so /home/clay/rootfs/libcp -d $file.so.[*0-9] /home/clay/rootfs/libdonecp -d ld*.so* /home/clay/rootfs/lib------------------------------------//clay@pan:~$ sudo cp libcopy.sh /usr/local/arm/3.4.1/arm-linux/lib/clay@pan:~$ cd /usr/local/arm/3.4.1/arm-linux/libclay@pan:/usr/local/arm/3.4.1/arm-linux/lib$ sudo sh libcopy.sh制作cramfsclay@pan:~$ ./mkcramfs rootfs/ rootfs.cramfs//下载tftp 0x30008000 rootfs.cramfsnand erase 0x00200000 0x02800000nand write 0x30008000 0x00200000 0x00300000完成.kernel可以引导rootfs7 =======遇见的问题和参考的网站===========//网址不不一定对,可以按照关键字去搜(1)Error: unrecognized/unsupported machine ID (r1 = 0x33f60264).// cmd_boot.c or kernel head.S add id = 0xc1(2)Warning: unable to open an initial console.Failed to execute /linuxrc. Attempting defaults...Kernel panic - not syncing: No init found. Try passing init= option to kernel.//linuxrc 不能用busybox的,需要修改(3)## Booting image at 30008000 ...Bad Magic Number// 使用bootm的启动,必须是uImage的内核(/linux/dosc1/59/linux-393120 .htm)(4)VFS: Cannot open root device "hda1" or unknown-block(2,0)Please append a correct "root=" boot optionKernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)// kernel没有找到rootfs(5)内核kernel以及根文件系统rootfs是如何映射到对应的nand flash的地址的(/course/6_system/linux/Linuxj s/20100204/194702.html)(6)U-BOOT下使用bootm引导内核方法bootm kernel(/lanmanck/archive/2009/ 06/16/4273967.aspx)比较详细解释了bootm用法,好文章(7)uboot中利用TFTP和NFS加载内核镜像和根文件系统(/u3/108239/showart_21443 75.html)介绍了tftp nfs 中配置(8)uImage的制作(/sunxuxi/blog/item/bf3bd62f1a6 f0d3b1f3089cb.html)2.6.14内核已经有操作,只需要mkimage文件放到/usr/bin,及修改arch/arm/boot/Makefile,改变引导参数,见(6)(10)常用UBoot命令(/zhandoushi1982/archive/2009/ 10/15/4677728.aspx)(11)解决uboot-1.1.6 tftp命令不能成功下载文件的问题(/u3/93291/showart_206163 0.html)解决方法及查问题过程(12)移植U-Boot.1.2.0到博创2410-S 移植U-Boot.1.2.0到友善之臂SBC2440V4uboot nand搬移uboot.bin过程(13)移植U-Boot过程中遇到的问题(/u3/97105/showart_196263 8.html)浮点,CRC问题,Bad Magic Number(14)文件系统的制作(/luofuchong/archive/2007/0 1/10/21711.aspx)大概介绍(15)构造cramfs根文件系统(基于busybox)(/post/26082/469877 )理论介绍,但没有修改linurc(16)cramfs文件系统中ARM9上的移植(三)(/lmzzyw/blog/item/e1f07ac88ae 6b1127f3e6fc4.html)包含linuxrc及复制*.so链接库的脚本(17)[2410]移植cramfs文件系统和busybox到linux2.6(/aokikyon/blog/item/55 8a4a3ec997813b71cf6c26.html)解决cramfs 一些问题(18)ARM9 2410移植之linux 2.6 内核的移植(/zjsxycli/blog/item/87fe27213f 2398449358074b.html)移植全过程,包括nand分区,网卡等等(19)cramfs+yaffs嵌入式平台的实现(/space.php?uid=111047&do=b log&id=15372)。
uboot移植(深入浅出)
移植U-Boot.1.3.1到S3C244和S3C2410首先,U-Boot1.3.1还没有支持s3c2440,移植仍是用2410的文件稍作修改而成的。
2440和2410的区别在我移植1.2.0的文章中已经写了,这里不再赘述。
对于1.3.1和1.2.0的差别,我初看了一下,(对于ARM920T内核)应该是增加了对A TMEL 公司的A T91RM9200系列处理器的支持。
至于S3C24X0系列的芯片,原理上并没有什么大的变化。
一、在U-Boot中建立自己的开发板类型,并测试编译。
我为开发板取名叫: tekkaman24400 在工作目录下解压U-Boot。
[tekkamanninja@ARM9-Host working]$ tar -xjvf u-boot-1.3.1.tar.bz21 进入U-Boot目录,修改Makefile(我在fedora 8 下,比较喜欢使用KWrite)[tekkamanninja@ARM9-Host working]$ cd u-boot-1.3.1[tekkamanninja@ARM9-Host u-boot-1.3.1]$ kwrite Makefile#为tekkaman2440建立编译项sbc2410x_config: unconfig@$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0tekkaman2440_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t tekkaman2440 tekkaman s3c24x0LSD1808_config: unconfig@$(MKCONFIG) $(@:_config=) arm arm926ejs lsd1808 NULL am1808各项的意思如下:arm: CPU的架构(ARCH)arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。
一步步教你移植uboot(超精华版)
#make gec2440_config #make 编译完成时最后两句如下:
arm-linux-objcopy -O srec u-boot u-boot.srec arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin 表示编译成功。
# if defined(CONFIG_S3C2410)
ldr r1, =0x7ff //0x3ff,根据 2410 芯片手册,INTSUBMSK 有 11 位可用,vivi 也是 0x7ff, u-boot 则是 0x3ff,不过芯片复位后所有中断都被屏蔽,故这无影响
ldr r0, =INTSUBMSK
>> 2
广州广嵌电子科技有限公司
u-boot移植要点 我们可以总结出bootloader的两大功能:
1 是下载功能,既通过网口、串口或者USB口下载文件到RAM中。 2 是对flash芯片的读写功能。 u-boot对S3C2440已经有了很好的支持,在移植过程中主要是完善u-boot对nand flash 的读写功能。 u-boot移植前的准备工作 1.下载源码 Uboot的源码可以从以下网址下载: /u-boot/u-boot-2009.11.tar.bz2?modtime=1134 752480&big_mirror=0 我们这里下载的是u-boot-2009.11.tar.bz2 工具链使用cross-4.1.2
samsung: 开发者/或经销商(vender)。
s3c24x0: 片上系统(SOC)。 板子起名叫gec2440,可以依自己的喜好修改
UBOOT移植操作
UBOOT移植操作1. 确定目标平台和硬件:首先需要了解目标平台的硬件架构、处理器类型、存储设备(如 Flash 或者 SD 卡)等重要信息。
同时需要获取目标平台的硬件参考手册或者相关文档。
2.设置交叉编译工具链:UBOOT是使用C和汇编语言编写的,因此需要使用交叉编译工具链来生成可在目标平台上运行的二进制可执行文件。
交叉编译工具链包括交叉编译器、链接器和调试器等工具,这些工具需要针对目标平台进行配置。
4. 配置 UBOOT 环境:进入 UBOOT 源代码目录,运行 `make menuconfig` 命令来配置 UBOOT 的环境。
这个命令会打开一个图形界面,可以在其中选择需要的功能、驱动程序和选项。
根据目标平台的硬件特性和需求,选择适当的选项。
5. 修改配置文件:UBOOT 需要一个配置文件(通常是`include/configs/<target.h>`),在这个文件中需要将目标平台的硬件配置信息填入。
这些信息包括芯片型号、Flash 存储器地址等。
还需要设置启动参数,如内核地址、根文件系统地址等。
6. 编译 UBOOT:运行 `make` 命令来编译 UBOOT。
根据配置和硬件平台的不同,可能需要选择不同的编译选项。
编译过程会生成一个 UBOOT 头文件(u-boot.bin)和其他必要的文件。
7.将UBOOT烧录到目标平台:使用烧录工具(如JTAG烧录器、USB烧录器或者SD卡等)将编译好的UBOOT烧录到目标平台的存储设备中。
具体的烧录方法和工具依赖于目标平台的配置。
8.测试和调试:将烧录好的UBOOT安装到目标平台后,通过串口或者网络连接到目标平台,使用终端工具进行测试和调试。
可以通过串口输出来查看启动过程中的日志和错误信息,或者使用调试工具来分析程序执行的问题。
9.优化和定制:根据需求对UBOOT进行优化和定制。
可以修改配置文件、增加功能模块或者修改代码,以达到更好的性能和适应特定需求的目的。
嵌入式linux操作系统移植
嵌入式linux操作系统移植嵌入式Linux操作系统移植是一个广泛应用的开发任务,主要用于将Linux操作系统移植到特定的嵌入式设备上。
在嵌入式系统开发中,这种移植可以帮助开发者在一个有限资源环境中实现更高效、更可靠的运行。
嵌入式Linux操作系统有许多优势。
它是一个开源项目,有着广泛的开发者和社区支持。
这意味着有大量的资源和文档可供参考,有利于降低开发难度和成本。
Linux具有良好的稳定性和可靠性,能在各种硬件平台上运行。
嵌入式Linux可以提供类似PC的环境,但需要的资源更少,效率更高。
需要选择一个适合设备硬件平台和应用程序需求的Linux内核版本。
这可能包括ARM、MIPS或其他架构。
选择后,下载并解压相应的内核源代码。
配置内核是移植过程中的关键步骤。
通过make menuconfig或make config命令,可以针对特定硬件平台和应用程序需求进行配置。
这包括处理器类型、内存大小、设备驱动、文件系统等。
针对硬件平台编写或修改设备驱动程序,以确保Linux内核能正确识别和访问设备。
这通常需要了解硬件的工作原理和Linux驱动程序开发的相关知识。
使用make命令编译内核和设备驱动程序。
成功后,生成可烧录到设备上的映像文件(如zImage或initramfs)。
将映像文件烧录到目标设备并启动。
嵌入式Linux操作系统的移植是一项复杂的任务,需要深入了解硬件平台、操作系统和驱动程序开发的知识。
还需要注意以下几点:有限的资源:嵌入式设备的资源通常比PC少得多,如RAM、Flash等。
这需要在移植过程中优化资源的使用。
硬件兼容性:确保选择的Linux内核版本与目标设备的硬件兼容。
如果不兼容,可能会导致系统运行不稳定或无法运行。
驱动程序稳定性:设备驱动程序的稳定性直接影响到整个系统的稳定性和可靠性。
在编写或修改驱动程序时,需要进行充分的测试和验证。
网络安全性:嵌入式系统通常具有网络连接功能,因此需要考虑网络安全问题。
ARM—Linux嵌入式系统BootLoader的配置与移植
蠢霞NG Lei。珏U Hal.na (CoUege of Computer Science&Tech.,Xud瑚a University,Xuclmg 461000,China)
the哂tO挝触the年蛾翩such鹞the Ahgrset:Embedded system omfiguraticn and transplantatiⅨa is
Oct. 2008
ARM—Linux嵌入式系统BootLoader的配置与移植
孟雷,忽海娜
(译蔼擎篦谤算祝耪学与技术学院,河南许蒜461000)
摘褰:嵌入式系统陆tl舶d凹的配置及移檬是解决嵌入式系统的启动、初始化、搽作系统内核的固化和弓I龉等问题的关
键。分耩-r ARM-Linux嵌入姨系统戆维羧,会绥了1300tLoader熬撬念及移蕉、骖羧爨要注意豹阚疆。劳激¥3C4480缝
transplantation
S3CA480讲a=e霸of as an雠-
lo抵the妇出站魄progtmn窝渲融∞a融,rl威ove maple,real酶the configuration and tmasohntation in the Linux蜀瞎tem.By
the start
&ini痂燕跪矗m of鼎豳edded system.
·205·
1)高性能、低功耗。 2)支持以太网接口。 3)丰富的中断控制器,以满足与FPGA接口的需 要。 4)U=D控制器。 5)至少拥有2个I,ART接口(CPU与GPRS模块 接口为IIART)。 6)拥有12C总线控制器。
接口,以方便与黝连接。 7)基于ARM的收视率终端设备,实现丰富的I/O
每种不同的CPU体系结构都有不同的BootLoad. er。除了依赖于CPU的体系结构外,BootLoader实际 上也依赖于具体的嵌入式板级设备的配置,比如板卡 的硬件地址分配,RAM芯片的类型,其他外设的类型 等。这也就是说,对于两块不同的嵌入式板而言,即使 它们是基于同一种CPU而构建的,如果他们的硬件资 源和配置不一致的话,要想让运行在一块板子上的
UBoot移植详细教程
u-boot 移植步骤详解(必会)1 U-Boot简介U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。
其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。
其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。
这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。
这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。
其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT 改名为U-Boot后逐步扩充的。
从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。
当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。
嵌入式linux内核移植步骤
嵌入式linux内核移植步骤嵌入式Linux内核移植步骤嵌入式Linux内核移植是将Linux内核移植到特定的硬件平台上的过程。
在进行嵌入式Linux内核移植之前,需要先了解目标硬件平台的相关信息,包括处理器架构、硬件接口、设备驱动等。
本文将介绍嵌入式Linux内核移植的主要步骤,以帮助读者了解移植的过程。
1. 获取源代码需要从官方或其他可靠的渠道获取Linux内核的源代码。
可以选择下载最新版本的稳定内核,也可以根据需要选择特定版本的内核。
获取源代码后,解压到本地目录。
2. 配置内核在进行内核配置之前,需要根据目标硬件平台选择适当的配置文件。
内核配置文件包含了编译内核所需的各种选项和参数。
可以使用make menuconfig或make defconfig命令进行内核配置。
在配置过程中,需要根据目标硬件平台的特点进行相应的配置,如选择正确的处理器类型、设备驱动等。
3. 编译内核配置完成后,可以使用make命令编译内核。
编译过程可能会比较耗时,需要根据计算机性能进行相应的等待。
编译完成后,会生成vmlinuz和相关的模块文件。
4. 编译设备树设备树是描述硬件平台的一种数据结构,用于在内核启动时传递硬件信息给内核。
如果目标硬件平台需要使用设备树,需要将设备树源文件编译为二进制文件。
可以使用device tree compiler(dtc)工具来编译设备树。
5. 烧录内核内核编译完成后,需要将生成的vmlinuz文件烧录到目标硬件平台上。
根据硬件平台的不同,可以使用不同的烧录工具,如dd命令、fastboot等。
烧录完成后,可以通过串口或其他方式查看内核启动信息。
6. 配置文件系统内核烧录完成后,需要为目标硬件平台配置文件系统。
可以选择使用已有的文件系统,如busybox、buildroot等,也可以根据需求自行定制文件系统。
配置文件系统包括选择合适的文件系统类型、添加必要的应用程序和驱动、配置网络等。
uboot内核移植和裁剪详细步骤
uboot内核移植和裁剪详细步骤-U-boot内核移植步骤:Linux 3.3.5系统移植1. 将arch/arm/mach-s3c6410/下的,mach-smdk6410.c cp为mach-my6410.c;2. 打开arch/arm/mach-s3c6410/下的Kconfig,仿照MACH_SMDK6410做一个菜单项:config MACH_MY6410bool "MY6410"select CPU_S3C6410select SAMSUNG_DEV_ADCselect S3C_DEV_HSMMCselect S3C_DEV_HSMMC1select S3C_DEV_I2C1select SAMSUNG_DEV_IDEselect S3C_DEV_FBselect S3C_DEV_RTCselect SAMSUNG_DEV_TSselect S3C_DEV_USB_HOSTselect S3C_DEV_USB_HSOTGselect S3C_DEV_WDTselect SAMSUNG_DEV_BACKLIGHTselect SAMSUNG_DEV_KEYPADselect SAMSUNG_DEV_PWMselect HAVE_S3C2410_WATCHDOG if WATCHDOGselect S3C64XX_SETUP_SDHCIselect S3C64XX_SETUP_I2C1select S3C64XX_SETUP_IDEselect S3C64XX_SETUP_FB_24BPPselect S3C64XX_SETUP_KEYPADhelpMachine support for the Pillar MY64103. 打开arch/arm/tools/mach-types文件,这里面存的是机器ID必须要和uboot里面的ID保持一致,将其283行复制添加在后面并修改为: smdk6410MACH_SMDK6410 SMDK6410 1626 xx6410 MACH_XX6410 XX6410 1626 这个机器ID和UBOOT里的机器ID相同时才能启动内核;1. 修改BSP文件mach-my6410.c,内容如下:将mach-mach-my6410.c文件中的所有smdk6410改成my6410(不要改大写SMDK6410的)MACHINE_START(MY6410, "MY6410")//这个要和Kconfig里的MACH-MY6410匹配 2. 在当前目录的Makefile最后一行加上 obj-$(CONFIG_MACH_MY6410) += mach-my6410.o3. 修改顶层的Makefile:ARCH ?= armCROSS_COMPILE ?= /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux- 4. 复制arch/arm/configs/下的s3c6400-defconfig文件,然后将其保存为.config,配置内核支持EABI,再选中XX6410 board这一项,保存退出;5. 执行make menuconfig对内核进行配置:执行make编译执行make zImage生成zImage将uboot根目录下的mkimage拷贝到/user/bin目录下执行make uImage生成uImage通过以上几步linux内核移植完了,剩下就移植驱动了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一)嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。
一为总结经验,二希望能给想入门嵌入式Linux 的朋友提供方便。
如有错误之处,谢请指正。
•共享资源,欢迎转载:一、移植环境•主机:VMWare--Fedora 9•开发板:Mini2440--64MB Nand,Kernel:2.6.30.4•编译器:arm-linux-gcc-4.3.2.tgz•u-boot:u-boot-2009.08.tar.bz2二、移植步骤本次移植的功能特点包括:•支持Nand Flash读写•支持从Nor/Nand Flash启动•支持CS8900或者DM9000网卡•支持Yaffs文件系统•支持USB下载(还未实现)1.了解u-boot主要的目录结构和启动流程,如下图。
u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;u-boot的stage2代码通常放在lib_xxxx/board.c文件中,他用C语言写成。
各个部分的流程图如下:2. 建立自己的开发板项目并测试编译。
目前u-boot对很多CPU直接支持,可以查看board目录的一些子目录,如:board/samsung/目录下就是对三星一些ARM 处理器的支持,有smdk2400、smdk2410和smdk6400,但没有2440,所以我们就在这里建立自己的开发板项目。
1)因2440和2410的资源差不多,主频和外设有点差别,所以我们就在board/samsung/下建立自己开发板的项目,取名叫my2440#tar -jxvf u-boot-2009.08.tar.bz2 //解压源码#cd u-boot-2009.08/board/samsung/ //进入目录#mkdir my2440 //创建my2440文件夹2)因2440和2410的资源差不多,所以就以2410项目的代码作为模板,以后再修改#cp -rf smdk2410/* my2440/ //将2410下所有的代码复制到2440下3)修改u-boot跟目录下的Makefile文件。
查找到smdk2410_config的地方,在他下面按照smdk2410_config的格式建立my2440_config的编译选项,另外还要指定交叉编译器4)测试编译新建的my2440开发板项目到此为止,u-boot对自己的my2440开发板还没有任何用处,以上的移植只是搭建了一个my2440开发板u-boot的框架,要使其功能实现,还要根据my2440开发板的具体资源情况来对u-boot源码进行修改。
3. 根据u-boot启动流程图的步骤来分析或者修改添加u-boot源码,使之适合my2440开发板(注:修改或添加的地方都用红色表示)。
1)my2440开发板u-boot的stage1入口点分析。
一般在嵌入式系统软件开发中,在所有源码文件编译完成之后,链接器要读取一个链接分配文件,在该文件中定义了程序的入口点,代码段、数据段等分配情况等。
那么我们的my2440开发板u-boot的这个链接文件就是cpu/arm920t/u-boot.lds,打开该文件部分代码如下:知道了程序的入口点是_start,那么我们就打开my2440开发板u-boot第一个要运行的程序cpu/arm920t/start.S(即u-boot 的stage1部分),查找到_start的位置如下:从这个汇编代码可以看到程序又跳转到start_code处开始执行,那么再查找到start_code处的代码如下:由此可以看到,start_code处才是u-boot启动代码的真正开始处。
以上就是u-boot的stage1入口的过程。
2)my2440开发板u-boot的stage1阶段的硬件设备初始化。
由于在u-boot启动代码处有两行是AT91RM9200DK的LED初始代码,但我们my2440上的LED资源与该开发板的不一致,所以我们要删除或屏蔽该处代码,再加上my2440的LED驱动代码(注:添加my2440 LED功能只是用于表示u-boot运行的状态,给调试带来方便,可将该段代码放到任何你想调试的地方),代码如下:/*bl coloured_LED_init//这两行是AT91RM9200DK开发板的LED初始化,注释掉bl red_LED_on*/#if defined(CONFIG_S3C2440)//区别与其他开发板//根据mini2440原理图可知LED分别由S3C2440的PB5、6、7、8口来控制,以下是PB 端口寄存器基地址(查2440的DataSheet得知)#define GPBCON 0x56000010#define GPBDAT 0x56000014#define GPBUP 0x56000018//以下对寄存器的操作参照S3C2440的DataSheet进行操作ldr r0, =GPBUPldr r1, =0x7FF //即:二进制11111111111,关闭PB口上拉str r1, [r0]ldr r0, =GPBCON //配置PB5、6、7、8为输出口,对应PBCON寄存器的第10-17位 ldr r1, =0x154FD //即:二进制010101010011111101str r1, [r0]ldr r0, =GPBDATldr r1, =0x1C0 //即:二进制111000000,PB5设为低电平,6、7、8为高电平str r1, [r0]#endif//此段代码使u-boot启动后,点亮开发板上的LED1,LED2、LED3、LED4不亮在include/configs/my2440.h头文件中添加CONFIG_S3C2440宏#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */#define CONFIG_S3C2440 1/* in a SAMSUNG S3C2440 SoC */现在编译u-boot,在根目录下会生成一个u-boot.bin文件。
然后我们利用mini2440原有的supervivi把u-boot.bin下载到RAM中运行测试(注意:我们使用supervivi进行下载时已经对CPU、RAM进行了初始化,所以我们在u-boot中要屏蔽掉对CPU、RAM的初始化),如下:/*#ifndef CONFIG_SKIP_LOWLEVEL_INIT //在start.S文件中屏蔽u-boot对CPU、RAM的初始化bl cpu_init_crit#endif*/#make my2440_config#make下载运行后可以看到开发板上的LED灯第一了亮了,其他三个熄灭,测试结果符合上面的要求。
终端运行结果如下:3)在u-boot中添加对S3C2440一些寄存器的支持、添加中断禁止部分和时钟设置部分。
由于2410和2440的寄存器及地址大部分是一致的,所以这里就直接在2410的基础上再加上对2440的支持即可,代码如下:# endif# if defined(CONFIG_S3C2440)//添加s3c2440的中断禁止部分ldr r1, =0x7fff //根据2440芯片手册,INTSUBMSK寄存器有15位可用ldr r0, =INTSUBMSKstr r1, [r0]# endif# if defined(CONFIG_S3C2440) //添加s3c2440的时钟部分#define MPLLCON 0x4C000004 //系统主频配置寄存器基地址#define UPLLCON 0x4C000008 //USB时钟频率配置寄存器基地址ldr r0, =CLKDIVN //设置分频系数FCLK:HCLK:PCLK = 1:4:8mov r1, #5str r1, [r0]ldr r0, =MPLLCON //设置系统主频为405MHzldr r1, =0x7F021 //这个值参考芯片手册“PLL VALUE SELECTION TABLE”部分str r1, [r0]ldr r0, =UPLLCON //设置USB时钟频率为48MHzldr r1, =0x38022 //这个值参考芯片手册“PLL VALUE SELECTION TABLE”部分str r1, [r0]#else //其他开发板的时钟部分,这里就不用管了,我们现在是做2440的/* FCLK:HCLK:PCLK = 1:2:4 *//* default FCLK is 120 MHz !*/ldr r0,=CLKDIVNmov r1, #3str r1,[r0]# endifS3C2440的时钟部分除了在start.S中添加外,还要分别在board/samsung/my2440/my2440.c和cpu/arm920t/s3c24x0/speed.c中修改或添加部分代码,如下:#if defined(CONFIG_S3C2440)if(pllreg == MPLL){ //参考S3C2440芯片手册上的公式:PLL=(2 * m * Fin)/(p * 2s)return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s));}#endifreturn((CONFIG_SYS_CLK_FREQ * m)/(p << s));}/* return HCLK frequency */ulong get_HCLK(void){S3C24X0_CLOCK_POWER *const clk_power = S3C24X0_GetBase_CLOCK_POWER();#if defined(CONFIG_S3C2440)return(get_FCLK()/4);#endifreturn((clk_power->CLKDIVN & 0x2)? get_FCLK()/2 : get_FCLK());}好了!修改完毕后我们再重新编译u-boot,然后再下载到RAM中运行测试。
结果终端有输出信息并且出现类似Shell的命令行,这说明这一部分移植完成。
示意图如下:4)准备进入u-boot的第二阶段(在u-boot中添加对我们开发板上Nor Flash的支持)。
通常,在嵌入式bootloader中,有两种方式来引导启动内核:从Nor Flash启动和从Nand Flash启动。