关于linux和arm嵌入式的关系。

关于linux和arm嵌入式的关系。,第1张

linux是 *** 作系统内核。arm嵌入式,是说的硬件。也就是把arm 架构的CPU做的机器,嵌入到某个设备上作为一部分的开发。 *** 作方法如下:

1、新建一个目录:mkdir embedded_linux,将linux内核解压到该目录下:tar -jxf linux-3.1.1.tar.bz2 -C embedded_linux/。

2、内核的配置有三种方式:make config 文本配置方式;make menuconfig 菜单配置方式;make xconfig 图形界面配置方式(需安装qt)。

3、终端输入命令:make menuconfig,打开内核配置界面。

4、内核裁剪需要根据项目需求,System V IPC (IPC:Inter Process Communication)是组系统调用及函数库,程序运行必备的,其余根据个人需求包含或删除。

5、在所有需要的选项配置完毕之后,按Esc退出,选择Yes保存,就完成了。

源代码是一样的,只是在不同的平台上的选项不同,编译出来的二进制代码也不同。

内核包括硬件驱动、文件系统、进程管理、内存管理、I/O管理等各大模块,ARM和x86系统主要的差异在硬件驱动层面。

1. 内核启动地址

ZTEXTADDR

解压代码运行的开始地址。没有物理地址和虚拟地址之分,因为此时MMU处于关闭状态。这个地址不一定时RAM的地址,可以是支持读写寻址的flash等存储中介。

Start address of decompressor. here's no point in talking about virtual or physical addresses here, since the MMU will be off at the time when you call the decompressor code. You normally call the kernel at this address to start it booting. This doesn't have to be located in RAM, it can be in flash or other read-only or read-write addressable medium.

在arch/arm/boot/compressed/Makefile中说的很明确

#

# We now have a PIC decompressor implementation. Decompressors running

# from RAM should not define ZTEXTADDR. Decompressors running directly

# from ROM or Flash must define ZTEXTADDR (preferably via the config)

# FIXME: Previous assignment to ztextaddr-y is lost here. See SHARK

ifeq ($(CONFIG_ZBOOT_ROM),y)

ZTEXTADDR := $(CONFIG_ZBOOT_ROM_TEXT)

ZBSSADDR:= $(CONFIG_ZBOOT_ROM_BSS)

else

ZTEXTADDR := 0

ZBSSADDR:= ALIGN(8)

endif

ZRELADDR

内核启动在RAM中的地址。压缩的内核映像被解压到这个地址,然后执行。

This is the address where the decompressed kernel will be written, and eventually executed. The following constraint must be valid:

__virt_to_phys(TEXTADDR) == ZRELADDR

The initial part of the kernel is carefully coded to be position independent.

一般定义在项目目录下,比如:

arch/arm/mach-at91/Makefile.boot: zreladdr-y += 0x70008000

arch/arm/mach-at91/Makefile.boot: zreladdr-y += 0x20008000

arch/arm/mach-cns3xxx/Makefile.boot: zreladdr-y += 0x00008000

arch/arm/mach-davinci/Makefile.boot: zreladdr-y += 0xc0008000

arch/arm/mach-davinci/Makefile.boot: zreladdr-y += 0x80008000

arch/arm/mach-dove/Makefile.boot: zreladdr-y += 0x00008000

arch/arm/mach-ebsa110/Makefile.boot: zreladdr-y += 0x00008000

arch/arm/mach-exynos/Makefile.boot: zreladdr-y += 0x40008000

arch/arm/mach-footbridge/Makefile.boot: zreladdr-y += 0x00008000

arch/arm/mach-gemini/Makefile.boot: zreladdr-y += 0x00008000

arch/arm/mach-gemini/Makefile.boot: zreladdr-y += 0x10008000

arch/arm/mach-integrator/Makefile.boot: zreladdr-y += 0x00008000

arch/arm/mach-iop13xx/Makefile.boot: zreladdr-y += 0x00008000

在arch/arm/boot/Makefile中被赋值:

ZRELADDR := $(zreladdr-y)

PARAMS_PHYS := $(params_phys-y)

INITRD_PHYS := $(initrd_phys-y)

... ...

ifneq ($(LOADADDR),)

UIMAGE_LOADADDR=$(LOADADDR)

else

ifeq ($(CONFIG_ZBOOT_ROM),y)

UIMAGE_LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/6026527.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-12
下一篇 2023-03-12

发表评论

登录后才能评论

评论列表(0条)

保存