文档库 最新最全的文档下载
当前位置:文档库 › AM335x的linux内核移植

AM335x的linux内核移植

摘要

随着时代的发展,人们的生活越来越离不开电子产品,特别是嵌入式电子产品。嵌入式的发展越来越好,得益于硬件的发展和各类嵌入式系统的进步。在众多的嵌入式系统中,最为让人熟悉的就是linux了。所以,这次的课题就以linux 内核为主题,使用的开发板是TI的beaglebone white。

关键词:Linux移植,嵌入式,arm

目录

1.嵌入式系统的概念 (4)

1.1嵌入式系统定义 (4)

1.2ATMEL9200开发平台 (4)

2.BootLoader简介 (4)

2.1 Boot Loader概念 (4)

2.2 Boot Loader启动过程 (5)

2.3 常用的Bootloader…………………………………………… .5

2.4 u-boot移植…………………………………………………… .5

3.嵌入式linux操作系统 (7)

3.1 嵌入式Linux (7)

3.2 嵌入式Linux的特点 (7)

3.3 从Linux到嵌入式Linux (8)

4. 基于BeagleBone的嵌入式linux系统移植 (9)

4.1 移植概念 (9)

4.2 Linux与移植相关内核结构 (9)

4.3 嵌入式Linux 操作系统移植 (9)

5 文件系统构建 (9)

6 把u-boot、linux内核、文件系统下载到SD卡中 (11)

7启动开发板,链接pc,查看效果 (11)

8 参考文献 (13)

1.嵌入式系统的概念

1.1嵌入式系统定义

在信息科学技术爆炸式增长的今天,嵌入式系统早已经融入了我们生活的方方面面。美国汽车大王福特公司的高级经理曾宣称,“福特出售的‘计算能力’已超过了IBM”。这并不是一个哗众取宠或者夸张的说法,在真正感受这句话的震撼力之前,让我们先了解一下嵌入式系统(Embedded Systems)的定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端设备的键盘、鼠标、软驱、硬盘、显示卡、显示器、Modem、网卡、声卡等均是由嵌入式处理器控制的,嵌入式系统市场的深度和广度,由此可见一斑,尽管如此,它的市场价值也许仍然超过了您的想象:今天,嵌入式系统带来的工业年产值已超过了1万亿美元。

1.2BeagleBone开发平台

BeagleBone 是仅有信用卡大小的低成本Linux 计算机,它与Internet 相连并运行高级操作系统,例如Android 4.0 和Ubuntu Linux。BeagleBone 包含大量I/O 并使用TI Sitara ™AM335x ARM® Cortex™-A8 处理器为实时分析提供处理能力。要进一步进行定制和扩展,可以使用Cape 插件板以轻松扩展BeagleBone 的功能。

BeagleBone 具有广泛的开源软件支持选项,包括社区支持的Ångström Linux 发行版、Ubuntu或多个其他Linux 发行版。它还支持TI Android DevKit和TI Sitara Linux EZ SDK。TI 支持的两个操作系统使您可以快速入门并操作,只需进行简单的设置即可获得开箱即用体验。它们包括用于启动演示、基准和应用的GUI。此外,您可以快速开始开发您自己的应用。还通过嵌入的Adeneo 支持Windows Embedded Compact 7。

BeagleBone 是一个由社区支持的平台,可用作构建更完整系统的基础和社区软件基线的目标。作为一种替代方案,德州仪器(TI) 直接支持AM335x 入门套件或AM335x 评估模块。

2.BootLoader简介

2.1 Boot Loader概念

简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对Boot Loader 归纳出一些通用的概念来,以指导用户特定的Boot Loader 设计与实现。

2.2 Boot Loader启动过程

系统上电后,先执行第一阶段代码,进行相应的初始化后,将Blob 第二阶段代码复制到RAM 地址bloc_abs_base,然后跳转到第二阶段开始执行。在第二阶段中,从汇编跳转到 C 的Main() 函数,继续进行如下工作:

外围的硬件初始化(串口,USB 等);

将Flash 中的kernel 加载到DRAM 的kernel 区域;

将Flash 中的ramdisk 加载到DRAM 的ramdisk 区域;

根据用户选择,进入命令行模块或启动kernel。

2.3 常用的Bootloader

(1)Blob

Blob是Boot Loader Object的缩写,是一款功能强大的Bootloader。它遵循GPL,源代码完全开放。Blob既可以用来简单的调试,也可以启动Linux kernel。Blob最初是Jan-Derk Bakker和Erik Mouw为一块名为LART(Linux Advanced Radio Terminal)的板子写的,该板使用的处理器是StrongARM SA-1100。现在Blob 已经被移植到了很多CPU上,包括S3C44B0。

(2)Armboot

Armboot是一个bootloader,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的.它支持多种类型的Flash;允许映像文件经由bootp . dhcp . tftp从网络传输;支持从串口线下载S-record或者binary文件;允许内存的显示及修改;支持jffs2文件系统等。

(3)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嵌入式操作系统。

2.4 u-boot移植

因为TI是一家非常负责的公司,所以它的官网上有非常详细的移植方法文档和工具,这给我们开发人员带来了极大的便利。以下的移植都是参考Ti提供的技术文档的。

我们现在Ti的官网查找对应的资料。全英文的,看得有点吃力。下载Ti提供的在linux 地下进行开发的工具ti-sdk-am335x-evm-07.00.00.00,然后安装即可得到。

我们到目录:~/ti-sdk-am335x-evm-07.00.00.00/board-support/u-boot-2013.10-ti2013.12.01/下进行如下米命令进行默认的配置编译:

make O=am335x CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm am335x_evm

经过编译完成后,在当前目录下回有一个am335x目录生成,里面包含了u-boot启动映像u-boot.img文件和MLO文件。

以下是am335x的config.h的部分代码:

#ifndef __CONFIG_AM335X_EVM_H

#define __CONFIG_AM335X_EVM_H

#include

#define MACH_TYPE_TIAM335EVM3589/* Until the next sync */

#define CONFIG_MACH_TYPE MACH_TYPE_TIAM335EVM

/* Clock Defines */

#define V_OSCK24000000 /* Clock output from T2 */

#define V_SCLK(V_OSCK)

/* Custom script for NOR */

#define CONFIG_SYS_LDSCRIPT"board/ti/am335x/u-boot.lds"

/* Always 128 KiB env size */

#define CONFIG_ENV_SIZE(128 << 10)

#define CONFIG_ENV_V ARS_UBOOT_RUNTIME_CONFIG

#ifndef CONFIG_SPL_BUILD

#define CONFIG_EXTRA_ENV_SETTINGS \

"loadaddr=0x80200000\0" \

"fdtaddr=0x80F80000\0" \

"fdt_high=0xa0000000\0" \

"boot_fdt=try\0" \

"rdaddr=0x81000000\0" \

"bootpart=0:2\0" \

"bootdir=/boot\0" \

"bootfile=zImage\0" \

"fdtfile=undefined\0" \

"console=ttyO0,115200n8\0" \

"partitions=" \

"uuid_disk=${uuid_gpt_disk};" \

"name=rootfs,start=2MiB,size=-,uuid=${uuid_gpt_rootfs}\0" \

"optargs=\0" \

"dfu_alt_info_mmc=" DFU_ALT_INFO_MMC "\0" \

"dfu_alt_info_emmc=rawemmc mmc 0 3751936\0" \

"mmcdev=0\0" \

"mmcroot=/dev/mmcblk0p2 ro\0" \

"mmcrootfstype=ext4 rootwait\0" \

"usbroot=/dev/sda2 rw\0" \

"usbrootfstype=ext4 rootwait\0" \

"rootpath=/export/rootfs\0" \

"nfsopts=nolock\0" \

"static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}" \

"::off\0" \

"ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=${rdaddr},64M\0" \

"ramrootfstype=ext2\0" \

"mmcargs=setenv bootargs console=${console} " \

"${optargs} " \

"root=${mmcroot} " \

"rootfstype=${mmcrootfstype}\0" \

"usbargs=setenv bootargs console=${console} " \

"${optargs} " \

"root=${usbroot} " \

"rootfstype=${usbrootfstype}\0" \

"spiroot=/dev/mtdblock4 rw\0" \

"spirootfstype=jffs2\0" \

"spisrcaddr=0xe0000\0" \

"spiimgsize=0x362000\0" \

"spibusno=0\0" \

"spiargs=setenv bootargs console=${console} " \

"${optargs} " \

"root=${spiroot} " \

······

······

3.嵌入式linux操作系统

3.1 嵌入式Linux

嵌入式Linux(Embedded Linux)是指对Linux经过小型化裁剪后,能够固化在容量只有几十万字节或几十亿字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用Linux操作系统。

3.2 嵌入式Linux的特点

1)性能稳定,功能强大,占用资源较少。Linux是按照POSIX标准编写的,许多源代码借鉴了UNIX。

2)模块的动态加载,独特的内核结构和工作方式使Linux非常适合于工作在嵌入式系统中。

3)良好的平台可移植性,Linux已经支持除i386、i586、i686和arm之外的alpha、m68k、mips、mips64、ppc、sparc、sparc64、ia64的十多种体系结构。

4)系统可剪裁性,可以灵活的添加和删减各种驱动程序,具体的PDE(Portable Digital Equippment)跟实际应用联系十分密切,采用的器件多种多样,良好的平台可移植性和系统可剪裁性对灵活的系统设计有着极其重要的意义,也为开发调试提供了方便。

5)整个系统是免费的,只要遵守GPL规则,任何人都可以使用、修改甚至销售Linux,全世界有无数个人和组织在不断的完善Linux,有众多的计算机厂商提供Linux相关的产品和服务。开放源代码意味着对新设计、制造的硬件产品的快速支持。嵌入式系统的应用领域通常要求系统高度个性化、高度细分。因此,对新产品的快速支持是一个适合推广的嵌入式操作系统必须具备的能力。

6)对多种网络协议的完美支持。在即将到来的后PC时代,联网将成为数字产品必备的能力,没有联网能力的设备,在信息化时代会显得毫无意义。而Linux天生具备优良的网络连接能力,支持当前所有的网络协议。

3.3 从Linux到嵌入式Linux

由于Linux开始是为台式机开发的,与台式机相比,嵌入式系统有自己的一些特点,如内存容量有限等,所以把Linux应用于嵌入式系统,还需要做大量的工作。这些工作包括:

1)嵌入式系统中的挥发性/非挥发性存储器容量受到严格的限制,为适应系统对尺寸的要求,需要剪裁嵌入式Linux的内核。

2)嵌入式系统的主频和总线带宽也经常由于成本或应用的原因,不能或不必提供更高的性能,作为操作系统,嵌入式Linux也需要做出相应的改变,改写某些核心模块和驱动程序。

3)嵌入式Linux直接面向特定的应用,为了适应一些特殊的应用需求,有时必须改变嵌入式Linux的工作方式。例如Linux是一个多线程、多任务的操作系统,并不适用于某些实时性要求较高的环境中,目前已经出现了经过改造的,专门用于实时环境的嵌入式实时Linux。

4)嵌入式Linux的图形环境与桌面系统相比简陋的多,对中文的支持也不够完善,对于某些手持数字设备,这方面还有许多工作要做。

5)在嵌入式系统领域,没有Wintel这样的垄断组织,相比于桌面系统Linux,嵌入式Linux有更大的发展空间。

4. 基于BeagleBone的嵌入式linux系统移植

4.1 移植概念

在同一个硬件平台上可以运行不同的操作系统,比如在PC机上可以运行windows、linux。同样把操作系统和硬件相关的部分做相应的修改就可以运行在不同的硬件平台上,这就叫移植,即把运行在一个平台上的软件,经过修改运行在其它平台。

Linux 本身是个宏内核,这给移植带来了困难,但由于其有清晰的结构,所以移植也相对容易。Linux和CPU相关的目录是arch/和arch/asm-/目录中,是具体CPU体系的名字如arm。与之相关的结构是arch/arm和arch/asm-arm。嵌入式系统是“硬件可裁剪的”,因此工程师设计的硬件电路有所不同,从而要根据具体的硬件电路进行相应的内核电码移植。

4.2 Linux与移植相关内核结构

1.内存管理:

内存管理的代码主要在/mm,但是特定结构的代码在arch/*/mm。缺页中断处理的代码在/mm/memory.c ,而内存映射和页高速缓存器的代码在/mm/filemap.c 。缓冲器高速缓存是在/mm/buffer.c 中实现,而交换高速缓存是在mm/swap_state.c 和mm/swapfile.c。

2.进程间通信:

所有的SystemVIPC对象权限都包含在ipc_perm数据结构中,这可以在include/linux/ipc.h中找到。SystemV消息是在ipc/msg.c中实现。共享内存在ipc/shm.c中实现。信号量在ipc/sem.c中,管道在/ipc/pipe.c中实现。

4.3 嵌入式Linux 操作系统移植

到目录:~/ti-sdk-am335x-evm-07.00.00.00/board-support/linux-3.12.10-ti2013.12.01/下

使用默认配置编译:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap2plus_defconfig

make ARCH=arm CROSS_COMPILE= arm-linux-gnueabihf-zImage

编译完成后,会在目录./arch/arm/boot/下生成zImage文件。在arch/arm/boot/dts下有相应的device tree 文件。如果不适用默认提供的filesystem,则需要用到相应开发板的dtb 文件。如beaglebone需要am335x-bone.dtb。

把内核和对应dtb文件复制到filesystem的/boot目录下。

如果自定义配置的话,可以用menuconfig的图形界面进行配置

make ARCH=arm CROSS_COMPILE=arm-linux-gunueabihf- menuconfig

5 文件系统构建

到~/ti-sdk-am335x-evm-07.00.00.00/filesystem目录下解压

tisdk-rootfs-image-am335x-evm.tar.gz

把kernel 和dtb文件复制到解压出来的文件系统目录下的/boot下。然后再把解压出来的全部文件夹打包。(也可以不压缩打包,详细见下文。)

如果不打包,可以直接将全部目录复制到已经分区好的SDcard的rootfs分区,效果与使用工具把文件系统压缩包写入分区一样,但可能比较耗时。

6 把u-boot、linux内核、文件系统下载到SD卡中

到目录:~/ti-sdk-am335x-evm-07.00.00.00/bin下,使用工具create-sdcard.sh

这个shell脚本可以帮我们对SD卡进行分区,然后帮我们把三个文件都下载到对应的分区里。实际上我们只要用它来分区就可以了,文件可以直接复制到对应分区。

7启动开发板,链接pc,查看效果

启动开发板。使用如下命令minicom –c on –D /dev/ttyUSB0即可连接成功。按一下复位键。即可看到开发板上的系统正在启动。输入默认的用户ID:root即可登陆。

启动时的代码打印内容如下:

U-Boot SPL 2013.10-g78d8ebd (Mar 30 2014 - 20:46:34)

No AC power, disabling frequency switch

reading args

spl: error reading image args, err --1

reading u-boot.img

reading u-boot.img

U-Boot 2013.10-00189-g78d8ebd (Dec 23 2014 - 12:26:16)

I2C: ready

DRAM: 256 MiB

NAND: 0 MiB

MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1

*** Error - No Valid Environment Area found

*** Warning - bad CRC, using default environment

Net: not set. V alidating first E-fuse MAC

cpsw, usb_ether

Hit any key to stop autoboot: 0

mmc0 is current device

Scanning mmc 0...

4117600 bytes read in 580 ms (6.8 MiB/s)

33206 bytes read in 59 ms (548.8 KiB/s)

mmc0 is current device

SD/MMC found on device 0

reading uEnv.txt

** Unable to read file uEnv.txt **

4117600 bytes read in 580 ms (6.8 MiB/s)

33206 bytes read in 59 ms (548.8 KiB/s)

Kernel image @ 0x80200000 [ 0x000000 - 0x3ed460 ]

## Flattened Device Tree blob at 80f80000

Booting using the fdt blob at 0x80f80000

Loading Device Tree to 8f321000, end 8f32c1b5 ... OK

Starting kernel ...

[ 0.000000] Booting Linux on physical CPU 0x0

[ 0.000000] Linux version 3.12.10-ti2013.12.01 (gyn-root@ubuntu) (gcc versio4 [ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7d [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instructie

[ 0.000000] Machine: Generic AM33XX (Flattened Device Tree), model: TI AM335e [ 0.000000] cma: CMA: reserved 24 MiB at 8d800000

[ 0.000000] Memory policy: ECC disabled, Data cache writeback

[ 0.000000] CPU: All CPU(s) started in SVC mode.

[ 0.000000] AM335X ES1.0 (sgx neon )

······

·····

NOTE: If the package is a dependency of another package you

will be notified of the dependent packages. You should

use the --force-removal-of-dependent-packages option to

also remove the dependent packages as well

*************************************************************** *************************************************************** Stopping Bootlog daemon: bootlogd.

_____ _____ _ _

| _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_

| | _| .'| . | . | | __| _| . | | | -_| _| _|

|__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_|

|___| |___|

Arago Project https://www.wendangku.net/doc/8a19160271.html, am335x-evm ttyO0

Arago 2013.12 am335x-evm ttyO0

am335x-evm login:

我们输入用户名:root 不用密码即可登陆系统了。

到此,beaglebone的linux内核移植结束。

8 参考文献

Ti官网:https://www.wendangku.net/doc/8a19160271.html,/tool/cn/beaglebn#technicaldocuments。

Linux 系统移植

Linux 系统移植: 裸板开发: 没有操作系统的支持,没有任何库支持,包括硬件的驱动和上层应用程序都是自己开发的,若是实现相对简单的程序,容易实现复杂一些的程序,对程序员来说,需要懂硬件,懂软件,难度相对较大。 基于操作系统开发: 操作系统为我们提供了很多资源,提供了大量封装好的接口函数,共程序员使用,包括已经实现好的硬件驱动程序。 如何在一个裸板上部署一个操作系统将是在以下几天的主要内容::: 为TPAD部署系统需要: 1,引导程序(bootloader) u-boot.bin 2,操作系统内核 Image 3,文件系统 rootfs.cramfs 4,应用程序 移植课: 1,基于移植前的软件经过移植成为可以运行的软件(掌握原理

和方法) 2,部署到开发板(熟练操作) 一,引导程序boot+loader 1,在操作系统运行之前运行的一段代码 Boot:初始化硬件设备,建立内存空间映射图,将系统的软硬环境带到一个合适的状态 loader:将内核映像文件加载到内存(nand,tftp),之后跳转至内核处执行 2,操作系统内核linux: Linux内核的本质:从c语言的角度,内核就是c语言函数的集合。从硬件的角度,内核就是管理者。从应用程序的角度,内核就是服务的提供者。 Linux内核的功能:进程管理,内存管理,设备管理,文件系统,网络协议。 3,文件系统 是一种对存储设备上的数据进行组织和控制的机制,是操作系统的一部分,负责管理和存储文件信息。 TFTP:简单的网络传输协议 NFS :网络文件系统

嵌入式bootloader的操作模式: 启动加载模式 下载模式 U-boot 最新的源代码:ftp://ftp.denx.de/pub/u-boot 分析U-boot源码:u-boot根目录下共有26个目录,可以分为四类:●Cpu相关的或者开发板相关的目录: ◆board,cpu ●通用的函数目录: ◆include,lib_arm ,lib_i386,lib_generic,common ●通用的设备驱动程序目录: ◆disk,driver,fs,nand_sal,net,post,rtc ●U-boot工具,示例程序,文档目录: ◆tools,examples,doc 1.与硬件无关 2.与硬件相关(需要根据不同的硬件更改的代码) CPU:包含CPU架构相关的代码, uboot支持的每一款cpu在此目录下都有一个对应的文件夹 Board:包含和开发板相关的文件,每一个开发板都以一个子目录出现在当前目录中。

OMAP3530开发笔记之二:新内核编译

1.版本说明 使用天漠公司新移植的内核Linux-2.6.29 for Devkit8000,也可成功运行于SBC8100上,但由于硬件的差异性导致某些硬件不能正常工作。 DVSDK:DVSDK_3_00 3_00_02_44 2.下载软件 软件列表 1.OMAP35x-PSP-SDK-setuplinux-0 2.01.0 3.11.bin(Include kernel source code) 2.arm-2008q1-126-arm-none-linux-gnueabi.bin 3.linux-02.01.03.11-devkit8000-2.patch (https://www.wendangku.net/doc/8a19160271.html,/files/linux-02.01.03.11-devkit8000-2.patch) 3.安装 1.安装内核源码: #./ OMAP35x-PSP-SDK-setuplinux-02.01.03.11.bin 安装目录:/omap3530/dvsdk/OMAP35x-PSP-SDK-02.01.03.11 2.解压内核源码: #cd /omap3530/dvsdk/OMAP35x-PSP-SDK-02.01.03.11/src/kernel #tar zxvf linux-02.01. 03.11.tar.gz 3.为内核打补丁 将patch文件拷贝到内核根目录: #cp linux-02.01.03.11-devkit8000-2.patch linux-02.01.03.11 打补丁 #cd linux-02.01.03.11 #patch -p1 < linux-02.01.03.11-devkit8000-2.patch 4.将SBC8100光盘自带的UBOOT源码拷贝到src/u-boot目录,并解压: #tar jxvf u-boot-1.3.3.tar.bz2 会解压出文件夹”u-boot-1.3.3”,为其改名: #mv u-boot-1.3.3 u-boot-1.3.3-omap3sbc8100 #cd u-boot-1.3.3-omap3sbc8100 4.编译U-B O O T 1.查看uboot支持的开发板类型 #cd include/configs #ls

Linux2.6内核移植系列教程

Linux2.6内核移植系列教程 第一:Linux 2.6内核在S3C2440平台上移植 此教程适合2.6.38之前的版本,其中2.6.35之前使用同一yaffs补丁包,2.6.36--2.6.28 yaffs文件系统有所改变,2.6.39之后的暂时不支持,源码下载请到:https://www.wendangku.net/doc/8a19160271.html,/ 1.解压linux- 2.6.34.tar.bz2源码包 #tar jxvf linux-2.6.34.tar.bz2 2.修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改 ARCH ? =arm CROSS_COMPILE?=/usr/local/arm/4.3.2/bin/arm-linux- 注意: 交叉编译器的环境变量也需要改为4.3.2 #export PATH=/usr/local/arm/4.3.2/bin/:$PATH 其中ARCH变量用来决定:配置、编译时读取Linux源码arch目录下哪个体系结构的文件 PATH 用来决定交叉编译器版本 3.修改机器类型ID号 Linux源码中支持多种平台的配置信息,内核会根据bootloader传进来的mach-types决定那份平台的代码起作用,本人手里的板子是仿照三星公司官方给出的demo板改版而来,所以采用 arch/arm/mach-s3c2440/mach-smdk2440.c此配置文件,打开此文件,翻到最后,有以下信息: MACHINE_START(S3C2440, "SMDK2440") /* Maintainer: Ben Dooks */ .phys_io= S3C2410_PA_UART, .io_pg_offst= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, .boot_params= S3C2410_SDRAM_PA + 0x100, .init_irq= s3c24xx_init_irq, .map_io= smdk2440_map_io, .init_machine= smdk2440_machine_init, .timer= &s3c24xx_timer, MACHINE_END MACHINE_START(S3C2440, "SMDK2440")决定了此板子的mach-types,可以在以下文件中找到S3C2440对应的具体数字,"arch/arm/tools/mach-types"文件查找S3C2440,362,这里刚好与我们的bootloader相同,所以不用做修改,直接保存退出即可,如果不同则根据bootloader的内容修改此文件,或根据此文件修改boorloader的内容(在vivi中可通过param show查看,u-boot在 Y:\test\u-boot_src\u-boot_edu-2010.06\board\samsung\unsp2440\unsp2440.c文件: gd->bd->bi_arch_number = MACH_TYPE_S3C2440;中决定)。 4.修改平台输入时钟 由于我们使用的开发板跟SMDK2440.c晶振不同,需要修改修改平台的时钟频率,修改内核源码“arch/arm/mach-s3c2440/mach-smdk2440.c”,把时钟初始化中(S3C24XX_init_clocks(16934400 ))的16934400 改为12000000,因为我们的开发板上为12M。 5.解压yaffs.tar.gz2源码包,进入yaffs2文件夹,给内核打上补丁使内核支持yaffs2 Linux官方不支持yaffs文件系统,我们需要打上相应的补丁

AM335x的linux内核移植

摘要 随着时代的发展,人们的生活越来越离不开电子产品,特别是嵌入式电子产品。嵌入式的发展越来越好,得益于硬件的发展和各类嵌入式系统的进步。在众多的嵌入式系统中,最为让人熟悉的就是linux了。所以,这次的课题就以linux 内核为主题,使用的开发板是TI的beaglebone white。 关键词:Linux移植,嵌入式,arm

目录 1.嵌入式系统的概念 (4) 1.1嵌入式系统定义 (4) 1.2ATMEL9200开发平台 (4) 2.BootLoader简介 (4) 2.1 Boot Loader概念 (4) 2.2 Boot Loader启动过程 (5) 2.3 常用的Bootloader…………………………………………… .5 2.4 u-boot移植…………………………………………………… .5 3.嵌入式linux操作系统 (7) 3.1 嵌入式Linux (7) 3.2 嵌入式Linux的特点 (7) 3.3 从Linux到嵌入式Linux (8) 4. 基于BeagleBone的嵌入式linux系统移植 (9) 4.1 移植概念 (9) 4.2 Linux与移植相关内核结构 (9) 4.3 嵌入式Linux 操作系统移植 (9) 5 文件系统构建 (9) 6 把u-boot、linux内核、文件系统下载到SD卡中 (11) 7启动开发板,链接pc,查看效果 (11)

8 参考文献 (13)

1.嵌入式系统的概念 1.1嵌入式系统定义 在信息科学技术爆炸式增长的今天,嵌入式系统早已经融入了我们生活的方方面面。美国汽车大王福特公司的高级经理曾宣称,“福特出售的‘计算能力’已超过了IBM”。这并不是一个哗众取宠或者夸张的说法,在真正感受这句话的震撼力之前,让我们先了解一下嵌入式系统(Embedded Systems)的定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端设备的键盘、鼠标、软驱、硬盘、显示卡、显示器、Modem、网卡、声卡等均是由嵌入式处理器控制的,嵌入式系统市场的深度和广度,由此可见一斑,尽管如此,它的市场价值也许仍然超过了您的想象:今天,嵌入式系统带来的工业年产值已超过了1万亿美元。 1.2BeagleBone开发平台 BeagleBone 是仅有信用卡大小的低成本Linux 计算机,它与Internet 相连并运行高级操作系统,例如Android 4.0 和Ubuntu Linux。BeagleBone 包含大量I/O 并使用TI Sitara ™AM335x ARM® Cortex™-A8 处理器为实时分析提供处理能力。要进一步进行定制和扩展,可以使用Cape 插件板以轻松扩展BeagleBone 的功能。 BeagleBone 具有广泛的开源软件支持选项,包括社区支持的Ångström Linux 发行版、Ubuntu或多个其他Linux 发行版。它还支持TI Android DevKit和TI Sitara Linux EZ SDK。TI 支持的两个操作系统使您可以快速入门并操作,只需进行简单的设置即可获得开箱即用体验。它们包括用于启动演示、基准和应用的GUI。此外,您可以快速开始开发您自己的应用。还通过嵌入的Adeneo 支持Windows Embedded Compact 7。 BeagleBone 是一个由社区支持的平台,可用作构建更完整系统的基础和社区软件基线的目标。作为一种替代方案,德州仪器(TI) 直接支持AM335x 入门套件或AM335x 评估模块。 2.BootLoader简介 2.1 Boot Loader概念 简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对Boot Loader 归纳出一些通用的概念来,以指导用户特定的Boot Loader 设计与实现。

Sitara入门培训试题答案

PMIC是在一下哪个文件中配置的? A board/ti/am335x/evm.c AM335x 移植中, 下列哪个部分完成AM35x/AM37x上的x-Loader的功能? C SPL AM335x启动的第一个阶段,ROM code会加载? D SPL AM335x 移植中不会做下列的哪一项? C ARM Cortex-A8 Core的移植 AM335x系列芯片里,支持硬件3D模块加速的是以下哪些? B AM3354 \D AM3358 AM335x系列支持几路UART? D 6 针对AM335x芯片,Ti提供的Linux kernel版本是? A V3.2 目前在AM335x Beagle Bone上支持哪几种启动方式? A MMCSD\C UART AM3356不支持以下哪种内部模块? A SGX U-Boot 是被下列哪部分代码加载的? D SPL Ti官方提供了以下哪些操作系统源码的支持? A Linux\ B Android \D Wince Kernel是被下列哪部分代码加载的? C U-Boot 可以通过下列哪种方式获取最新的正在开发的U-boot代码? A在TI维护的开源工程上通过Git 工具获取 Linux启动包括哪几个步骤? A ROM code\ B SPL\ C U-Boot\ D Kernel\ E Filesystem 目前starterware 支持哪几种TI官方开发板? A GPEVM\ B SK\ C beaglebone\ D IA\ E ICE AM335x目前支持一下哪几种启动方式? A Nand Flash\ B SD card\ C Nor Flash\ D UART\ E thernet 可以通过下列哪种方式获取最新的正在开发的U-boot代码? A在TI维护的开源工程上通过Git 工具获取 File system是被下列哪部分代码挂载的? D Kernel 在Kernel移植过程中,以下哪几个模块是在SOC部分配置的?

实验三 linux的移植

实验三 linux的移植、内核、文件系统的生成与下载 一、实验目的 1. 了解linux移植的基本过程,掌握内核和文件系统的下载方法 二、实验内容 1. 学习linux移植的基本过程 2. 学习内核和文件系统的生成与下载方法 三、实验设备 1. PentiumII以上的PC机、EL-ARM860实验箱 四、linux的移植说明 本实验系统运行的linux版本是针对linux-2.6.28进行移植的,它存放在/实验软件/source_sys/目录内。由于移植内核所涉及的内容较多,且也较复杂, 同时,在涉及到的中断切换、内存管理方面的 复杂移植,一般也不必太过关心,网络 上有专门的非官方组织在完善该事情。 我们所做的大多是把该移植好的内核,让 它如何在自己的硬件系统上正常的运转起 来。因此,我们所做的移植也偏重于应用。 4.1. 内核的目录结构 Linux内核主要由5个子系统组成: ●进程调度子系统 ●进程间通讯子系统 ●内存管理子系统 ●虚拟文件系统子系统 ●网络接口子系统 Linux内核非常庞大,包括驱动程序在内有上百兆。2.4.18内核结构图如图4-3-1。 其主要结构目录: /arch子目录包含了所有与硬件体系结构相关的内核移植代码。其中每一个目录都代表一种硬件平台,对于每种平台都应该包括: boot: 包括启动内核所使用的部分或全部平台的相关代码。 kernel:包括支持体系结构特有的特征代码 lib:包括存放体系结构特有的通用函数的实现代码 mm:包括存放体系结构特有的内存管理程序的实现 mach-xxx:包括存放该处理器的移植代码 /Documentation子目录包含有关内核的许多非常详细的文档。 /drivers子目录包含内核中所有的设备驱动程序。 /fs 子目录包含了所有的文件系统的代码。 /include 子目录包含了建立内核代码时所需的大部分库文件的头文件,该模块利用其他模块重建内核。同时,它也包括不同平台需要的库文件。 /init子目录包含了内核的初始化代码,内核从此目录下开始工作。 /ipc 子目录包含了内核的进程间通讯的代码。 /kernel 子目录包含了主内核的代码,如进程调度等。 /lib 子目录包含了通用的库函数代码等。 /mm 子目录包含了内核的内存管理代码。 /net 子目录包含了内核的网络相关的代码。 /scripts 子目录包含了配置内核的一些脚本文件 一般在每个目录下,都有一个.depend 文件和一个 Makefile 文件,这两个文件都是编译时使用的辅助文件,仔细阅读这两个文件对弄清各个文件这间的联系和依托关系很有帮助;而且,在有的目录下还有Readme 文件,它是对该目录下的文件的一些说明,同样有利于我们对内核源码的理解。 因此,移植工作的重点就是移植arch目录下的文件。 4.2 内核的移植 4.2.1 设置目标平台和指定交叉编译器 在最上层的根目录/Makefile文件中,首先要指定所移植的硬件平台,以及所使用的交叉编译器。改为如下:ARCH := arm CROSS_COMPILE = arm-none-linux-gnueabi- 也就是说,所移植的硬件平台是ARM,所使用的交叉编译器是存放在目录/usr/local/arm/arm-2007q3/bin/下的 arm-none-linux-gnueabi-xxx等等工具。 五、linux的内核、文件系统编译与下载 5.1 编译linux内核 编译一份可以运行的linux,首先要对linux 进行配置。一般是通过make menuconfig 或者make xconfig 来实现的。我们选择make menuconfig,为了编译最后得到的内核文件zImage,我们需要如下几步: make omap3_techv35xx_defconfig #使用默认的配置编译, make clean #这个命令不要每次都用,执行后内核编译时间很长 (该命令用于清除以前构造内核时生成的所有目标文件、模块文件和临时文件) make menuconfig #查看配置情况 make uImage 等待编译结束 编译内核。编译通过后,在目录arch/arm/boot下生成uImage内核文件。 5.2 制作ubifs文件系统 ubifs是新一代的flash文件系统,其设计以及性能都优越于YAFFS2,特别是工作在大页MLC NAND FLASH上面,同时读写速度也比 yaffs2高出很多,ubifs文件系统的写入速度约为1.66M/s,读出速度约为2.27M/s.同时ubhifs系统的高压缩率也为生产安装

嵌入式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等,也可以根据需求自行定制文件系统。配置文件系统包括选择合适的文件系统类型、添加必要的应用程序和驱动、配置网络等。 7. 移植设备驱动 在完成文件系统配置后,可能需要进行设备驱动的移植工作。设备驱动是连接硬件和操作系统的桥梁,负责管理硬件资源和提供相应的接口。根据目标硬件平台的不同,可能需要编写或修改相应的设

一种基于strongSwan的IPSec VPN网关的实现

一种基于strongSwan的IPSec VPN网关的实现 蒋华;李康康;胡荣磊 【摘要】IPSec VPN是一种使用IPSec协议来实现的虚拟专用网技术.针对国密算法在网络安全产品上的应用相对较少这一问题,设计一种基于开源IPSec项目strongSwan的VPN网关.该网关使用SSX0912加密芯片中的国密算法接口替换了strongSwan的国际密码算法接口,完成了strongSwan对国密标准的支持.将修改后的strongSwan移植到AM335x为核心的开发板中,在嵌入式硬件环境中实现了IPSec VPN的网关.通过搭建开发环境测试,该网关运行稳定,延时小,使用硬件加密模块,安全性更高,相比于简单的Linux系统实现,应用范围也更加广泛.%IPSec VPN is a technology using IPSec protocol to implement virtual private network.Aiming at the problem that the application of secret algorithm in network security product is relatively small, a VPN gateway based on the open source IPSec project strongSwan is designed.The gateway replaces strongSwan's encryption algorithm interface with the SSX0912 encryption chip, which implements the strongSwan support for the state security standard.The modified strongSwan is transplanted to AM335x as the core of the development board in the embedded hardware environment to achieve the IPSec VPN gateway.By setting up the development environment, it is found that the gateway runs stably and has little https://www.wendangku.net/doc/8a19160271.html,pared with the simple Linux system, the hardware encryption module is more secure and the application range is more extensive. 【期刊名称】《计算机应用与软件》

AM335x ARM Cortex-A8核心板中文资料

AM335x ARM Cortex-A8核心板中文资料 1核心板简介 ➢基于TI AM335x ARM Cortex-A8 CPU,主频高达1GHz,运算能力高达1600DMIPS,搭配DDR3,兼容eMMC和NAND FLASH,; ➢2个PRU协处理器,支持EtherCAT、PROFINET、EtherNet/IP、PROFIBUS、Ethernet POWERLINK、SERCOS等工业协议; ➢内部集成SGX530 3D图形加速器和24bit LCD触摸屏控制器,分辨率高达2048 x 2048; ➢集成2路CAN、2路千兆网口、8路内部ADC、6路UART、2路SPI、3路PWM、3路eCAP等接口,适用于各种工业应用现场; ➢结构紧凑,体积小,尺寸仅58mm x 35mm; ➢工业级精密B2B 连接器,0.5mm 间距,稳定,易插拔,防反插,关键大数据接口使用高速连接器,保证信号完整性。 图1 SOM-TL335x正面

图2 SOM-TL335x背面 由广州创龙自主研发的SOM-TL335x是体积极小的AM335x Cortex-A8工业级核心板。采用沉金无铅工艺的八层板设计,专业的PCB Layout保证信号完整性的同时,经过严格的质量控制,满足工业各种极端环境应用,不仅提供丰富的Demo程序,还提供详细的开发教程,协助进行底板设计和调试以及软件开发。 2典型运用领域 ●工业及楼宇自动化 ●消费类医疗器械 ●机器人 ●智能收费系统 ●充电桩计费控制单元 ●称重系统 ●电力仪表 3软硬件参数 系统框图

图3 AM335x功能框图

软件参数

linux3.8.3内核移植之四:使linux内核支持nfs文件系统

配置nfs启动支持选项 [*] Networking support --->Networking options ---> [*] TCP/IP networking File systems --->[*] Network File Systems (NEW) 出错了,VFS: Cannot open root device "nfs" or unknown-block(0,255): error -6 百度后发现有配置内核时候有些选项没选:赶紧选上

这时候nfs文件系统选项下面多了个选项,就是因为这个没选上:

--- 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 (EXPERIMENTAL) | | | | [*] Root file system on NFS | | | | < > NFS server support #Vi config 也可直接更改.config文件 # # Networking options # # CONFIG_IP_PNP is not set CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_BOOTP=y CONFIG_IP_PNP_RARP=y CONFIG_NET_IPIP=y CONFIG_NET_IPGRE_DEMUX=y CONFIG_NET_IPGRE=y # # File systems # # CONFIG_UFS_FS is not set CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V3=y # CONFIG_NFS_V3_ACL is not set # CONFIG_NFS_V4 is not set CONFIG_ROOT_NFS=y # CONFIG_NFS_FSCACHE is not set # CONFIG_NFSD is not set 好了,现在可以开始编译了: root@xjg:/home/x210v3/kernel/linux-3.8.3# make uImage

ubifs的制作,移植的重点详解

ubifs的制作,移植的重点详解 PC操作系统:ubuntu 11.10 使用的开发板:am335x_evm 开发板使用的操作系统:linux 3.2 使用的 NAND FLASH的型号:MT29F2G08ABAEAWP 在制作 ubifs 文件系统的过程中需要如下: 为方便操作,把下面将要安装的数据包的解压文件到存放在:/home/user/mtd 再mkdir install,下面将要运行的数据包生成的文件将会存放在:/home/user/mtd/install 1),正确安装数据包: zlib-1.2.5;lzo-2.06;e2fsprogs-1.42,mtd-utils-1.5.0 这些数据包的版本最好如上所述,否则可能会导致无法生成所需的文件或生成的文件不正确 这是制作 ubifs 过程中将要用到的所有的软件包的连接:ubifs 1,zlib host$ tar xvf zlib-1.2.5.tar.gz host$ cd zlib-1.2.5/ host$ ./configure --prefix=/home/user/mtd/install 打开其根目录下的 Makefile,替换 gcc, ldshared, cpp, ar , ranlib 为如下: host$ gedit Makefile

CC=arm-arago-linux-gnueabi-gcc LDSHARED=arm-arago-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map CPP=arm-arago-linux-gnueabi-gcc -E AR=arm-arago-linux-gnueabi-ar rc RANLIB=arm-arago-linux-gnueabi-ranlib 保存,退出 host$ make host$ make install host$ cd .. 生成的 zlib.a 存放在 /home/user/mtd/install/lib 中; 生成的 zlib 的头文件存放在 /home/user/mtd/install/include 中。 zlib安装完成! 2,lzo host$ tar xvf lzo-2.06.tar.gz host$ cd lzo-2.06/ host$ ./configure --build=i686-pc-linux -- prefix=/home/user/mtd/install --host=arm-arago-linux-gnueabi host$ make host$ make install host$ cd .. 生成的 liblzo2.a 存放在 /home/user/mtd/install/lib 中; 生成的 lzo 的头文件存放在 /home/user/mtd/install/include/lzo中 lzo安装完成!

基于ARM的嵌入式linux内核的裁剪与移植

基于ARM的嵌入式linux内核的裁剪与移植 嵌入式系统一直是计算机行业中的领域之一。在许多应用程序中,嵌入式系统 越来越流行。嵌入式系统通常使用嵌入式芯片,如ARM芯片,并且它们通常运行Linux内核。Linux内核是一个开放源代码的操作系统内核。在嵌入式领域,Linux 内核可以被用于实现各种应用程序。本文将重点介绍如何基于ARM平台的嵌入式Linux内核进行裁剪和移植。 ARM平台 ARM处理器是一种RISC(Reduced Instruction Set Computer)处理器。这种 类型的处理器可用于嵌入式系统开发,因为它具有较低的功耗和高效的性能。ARM处理器有许多版本,其中包括ARMv6和ARMv7。 ARMv6通常用于嵌入式 系统,而ARMv7则用于智能手机和平板电脑等高端设备。 Linux内核的裁剪 在嵌入式系统中,Linux内核需要进行裁剪,以适应嵌入式设备的需求。与桌 面计算机相比,嵌入式系统拥有更少的资源,包括RAM、闪存和存储空间。因此,在将Linux内核移植到嵌入式系统之前,必须将内核进行裁剪。 在裁剪内核之前,您必须确定哪些内核模块是必需的。一些模块可以从内核中 移除,以减少内核的大小。通常,将不必要的模块和其他功能从内核中移除可以使内核变得更小并具有更好的性能。 另外,裁剪内核时应确保其他组件与内核兼容。例如,在新内核中可能需要更 改驱动程序或实用程序以适应修改后的内核。裁剪内核可能是一项比较困难的工作,需要深刻了解Linux内核的各个方面,以确保正确地裁剪内核。 移植Linux内核到ARM 移植内核是将Linux内核适应新硬件的过程。在开始移植内核之前,您必须了 解嵌入式设备的硬件架构以及所需的内核组件。移植Linux内核到ARM可以分为 以下步骤: 1.选择合适的ARM平台和处理器并确定所需的内核选项。 2.下载最新的内核源代码。 3.配置内核选项,并使其适应新硬件。 4.使用交叉编译器编译内核。 5.在新硬件上安装内核。

使用CCS调试Linux

M目录 实验前准备 创建工程 配置仿真器文件 编译Linux 调试Linux 实验前准备 Ubuntu 10.04 Linux 版CCSv5 SDK:本文使用的是SDK-05.05.00.00 创建工程 需要在CCS中创建一个makefile 工程,并将Linux源码导入。具体步骤为:(1)打开CCS

(2)创建makefile project ▪选择File -> New -> Project ▪展开C/C++分类 ▪选择Makefile Project with Existing Code

(3)导入Linux 按如下步骤导入Linux: ●点击Browse ●找到Linux 源码目录。 如/home/sitara/ti-sdk-am335x-evm-xx.xx.xx.xx/board-support/linux-xx.xx.xx

当你导入工程成功后,会看到如下界面:

配置仿真器文件 以XDS100V2仿真器为例, ●选择File -> New -> Target Configuration File ●在New Target Configuration对话框的file name中输入仿真器配置文件的文件名,如 AM335x-TC

点击Finish后,会弹出如下的编辑窗口,在Connection中选择” Texas Instruments XDS100v2 USB Emulator”仿真器,并在Board of Device中选择AM335x。之后点击Save即可。 Save 之后,可以点击Test Connection,如看到如下窗口出现”The JTAG DR Integrity scan-test

基于AM33x的UBootSPL的CCS调试

基于AM335x的U-Boot/SPL 的CCS 调试 在基于Linux的AM335x软件开发流程中,第一步确实是U-Boot/SPL(Second Program Loader)的移植。在移植中碰到问题比较常见,而U-Boot/SPL的调试手腕比 较简陋,不便于迅速找到问题。利用仿真器能够单步调试的特点,就能够迅速定位到 出问题的代码所在位置,加速移植的调试进程。本文要紧介绍如何用CCS+emulator调 试基于AM335x的U-Boot/SPL。 1.AM335x Linux启动进程和U-Boot/SPL调试代码的预备 1.1 AM335x Linux的启动进程 AM335x Linux的启动要紧包括ROM,SPL, U-Boot 和kernel四个启动步骤: A.ROM code ROM code是固化在芯片内部的代码,当上电时序正确,而且晶振等芯片启动 所需的条件都具有时,AM335x会从ROM code开始运行。 ROM code第一会读取sys_boot引脚上的配置,以确信寄存SPL的存储器,或 能够获取SPL的外设。 具体能够参考AM335x 中的第26章 Initialization。 ROM code会从相应的地址读取/获取SPL,并运行SPL。 B.SPL SPL和U-Boot 是bootloader的两个时期。那个地址分为两个时期的缘故是, ROM code中可不能配置DDR,时钟等最小系统,因此ROM code只能把 bootloader加载到片上SRAM中,而片上SRAM对本钱阻碍专门大,因此通常 很小,例如在AM335x上只有64K,不足够放下整个U-Boot,因此将U-Boot 分成两部份,SPL和U-Boot。 SPL要紧的职责确实是初始化DDR,时钟等最小系统,以读取U-Boot,并加载 到DDR中。具体来看,SPL 由ROM code加载到片上SRAM的起始位置,也确 实是0x402F0400。SPL会进一步对芯片进行配置,要紧包括以下几个方面以 完成其要紧职责:

AM335X开发日记

AM335X平台开发日记 2014-11-24至2014-11-29进行核心板原理图设计 2014-12-1至2014-12-10 进行PCB设计。 2014-12-5 开始学习AM335X软件部分的知识。 安装了vmware虚拟机,10.0.1版本的。 安装了ubunt12.04版本。 安装vmware-tools,创建共享文件夹。 在root(需执行sudo su)下执行mount -t vmhgfs .host:/ /mnt/hgfs 在windows共享文件夹存放TI安装包 ti-sdk-am335x-evm-06.00.00.00-Linux-x86-Install.bin。在终端里面执行安装。安装目录为/usr/local/ti-sdk-am335x-evm#,一般会自动加入环境变量,如果没有,在/etc/environment增加环境变量: (注意:6.0的安装包不支持ubunt14.04版本,只支持12.04以下的版本)PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/l ocal/ti-sdk-am335x-evm/linux-devkit/sysroots/i686-arago-linux/usr/bin:" 输入命令arm-linux-gnueabihf-gcc –v 即可查询版本 执行setup.sh配置linux环境,例如安装包更新,NFS,TFTP,minicom等。 下载了Uniflash V3,准备选择USB或者ETH接口进行FLASH编程。 执行命令make CROSS_COMPILE=arm-linux-gnueabihf- O=am335x ARCH=arm am335x_evm编译u-boot,生成MLO(spl)和u-boot.img Nandflash程序分区: 1.0-0x1ffff 为SPL 2.0x20000-0x3ffff为SPL backup1 3.0x40000-0x5ffff为SPL backup2 4.0x60000-0x7ffff为SPL backup3 5.0x80000-0x25ffff为uboot 6.0x260000 -0x27ffff为env 7.0x280000-0x77ffff为linux kernel 8.0x780000- 为file system 9.下载uboot软件并进行修改适应新设计的核心板,并把uboot下载到板子里 调试运行。 2014-12-8 下载安装TI的AM335X开发板的6.0软件包,安装下载了用于USB下载烧录FLASH

AM335x学习记录

AM335x 学习笔记 1硬件及其开发环境篇 1.1 开发环境的搭建 1.1.1路由器方式的NFS启动 1)通过路由器的方式来启动NFS文件系统 设置路由器局域网的网关:192.168.1.1,然后将开发板和PC都连接在路由器的LAN端口,并且采用DCHP的方式来实现tftp和nfs。 2)uEnv.txt serverip=192.168.1.27 rootpath=/opt/ti-sdk-am335x-evm/targetNFS bootfile=uImage-am335x-evm.bin ip_method=dhcp tftp_nfs_boot=echo Booting from network...; dhcp ${loadaddr} ${bootfile}; run net_args; bootm ${loadaddr} uenvcmd=run tftp_nfs_boot 1.1.2Root用户登陆 #sudo passwd root #****** #****** #sudo –s –H 切换到root用户 然后就可以重启虚拟机,以用户root来登陆 1.1.3中文字库问题 #locale –a 查看 是否有zh_CN,zh_CN.gb18030,zh_CN.gb2312等 #vim /var/lib/locales/supported.d/local

#dpkg-reconfigure locales #locale-gen zh_CN.GB18030 #locale-gen zh_CN.GB2312 #locale-gen zh_CN.GBK 1.1.4环境变量设置路径 #vim /etc/envinoment 常用的3个永久设置路径 ●#vim /etc/envirnoment ●#vim /etc/profile ●#vim ~/.bashrc (/root/.bashrc) 1.1.5设置ubuntu的上网ip 设置为bridge连接方式,设定静态IP地址. 1.1.6更改sh工具 #rm /bin/sh # ln –s /bin/bash /bin/sh #apt-get install fakeroot 1.1.7安装必须的工具 #apt-get install vim #apt-get install build-essential #apt-get install libtool #apt-get install bsion(干什么用的还不清楚) GNU autotools主要包括三个工具autoconf, automake,libtool 1.1.8 虚拟机开发工具的安装 $ sudo apt-get install build-essential libncurses-dev flex bison autoconf automake libmpfr-dev texinfo nfs-kernel-server tftpd-hpa libcloog-ppl

相关文档
相关文档 最新文档