设置uimage入口:由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。

要理解程序的入口地址,自然想到的是连接文件,首先看看开发板相对于某个开发板的连接文件"/board/你的开发板/u-boot.lds"

1.修改顶层makefile和board.cfg:入口makefile中添加如下新内容,因为需要执行make xxx_config配置自己的板子---->在单板的数据库boards_cfg中添加自己单板的信息;

qljt2440_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t qljt2440 qljt s3c24x0

2:添加include/configs/xxboard.h和board/Samsung/xx_board目录:在 include/configs/中建立开发板所需的头文件xxx.h。

在头文件结尾处添加如下宏定义:

#define CONFIG_S3C2440_NAND_BOOT 1

#define STACK_BASE    0x33f00000

#define STACK_SIZE    0x8000

--->在board/目录下建立自己的目录:该目录下含lowlevel_init.s、uboot.lds,config.mk及makefile,flash.c和xxxboard.c

此目录下修改flash.c、xxxboard.c分别保证flash读写和GPIO控制/PLL/flash初始化函数,makefile中添加flash.o和xxxboard.o,根据开发板内存区的配置修改lowlevel_init.S和uboot.lds;

3.修改start.s中部分寄存器地址的定义、时钟设置。

所以@$(MKCONFIG) –A $(@:_config=)分解出来就是mkconfig –A smdk4412,它的意思就是进入当前目录下的mkconfig文件并且传递两个参数(-A,smkd4412)给它。

Boards_cfg为各单板的数据库文件,mkconfig读取数据库文件并初始化ARCH等系统变量;

内核移植

============================================================

Uboot从C函数跳到kernel的head.s汇编(用汇编因为这部分代码会读取CPU型号等需要直接读写寄存器)--->C函数跳到汇编,汇编再跳到C函数;

内核移植必不可少的修改

1.修改机器码:

内核的机器码在arch/arm/tools/mach-types(机器码库)+arch/arm/mach-s3c2440/mach_smdk2440.c文件,将其“MACHINE_START(S3C2440, "SMDK2440")”中的第一项改为与uboot码值对应的宏,在这里是S3C2440;

u-boot的机器码是在arch\arm\include\asm\mach-types.h,代码在board/xxx/xxx_board.c

Uboot的机器码一定要修改成与内核的一致,因为内核head.S中会检查uboot传来的机器码与MACHINE_START(S3C2440, "SMDK2440")中的机器码是否一致。

2.修改时钟

arch/arm/mach-s3c2440/mach-smdk2440.c

修改s3c24xx_init_clocks(12000000);

3.修改makefile中的ARCH和编译器类型:

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-

4.使用S5PV210处理器的默认选项,然后就可以make生成uimage了

arch/arm/configs文件夹中有许多命名为xxx_defconfig的配置文件,如果运行make xxx_defconfig,当前.config文件会由xxx_defconfig文件生成。

Kbuild系统:是一个编译框架(makefile框架,因为是基于make编译工具)

1.obj-?和xxx-objs:obj-?指定编译什么,怎么编译?其中的“?”可能是“y”或“m”,“y”指定把对象编译进内核中,“m”指定把对象编译为模块。语法如下;     obj-? = $(target).o(target.o为某个o文件,也可能是多个o文件即xxx-objs);

xxx-objs指定了编译对象需要的文件,一般只有在源文件是多个时才需要它。

#drivers/isdn/i4l/Makefile

obj-$(CONFIG_ISDN) += isdn.o

isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o

2.EXTRA_CFLAGS:有时需要连接内核源代码外部的系统头文件,但Kbuild系统默认的系统头文件都在内核源代码内部,如何使用外部的头文件呢?

EXTRA_CFLAGS可以给Kbuild系统添加外部系统头文件,

EXTRA_CFLAGS += $(ext_include_path)

3.lib-?:所有用lib-y列出的objects在那个文件夹中被综合进单独的一个库,lib-y的使用方法通常被限制在lib/和arc/*/lib中。

#arch/i386/lib/Makefile

lib-y    := checksum.o delay.o

Make menuconfig时scripts目录下工具会读取各目录下的kconfig(定义了makefile中会用到的变量)并形成菜单;

Make menuconfig或make xxx_defconfig后产生.config,.config中的变量都是已定义并配置过的为各子目录的makefile所用。

注:为子目录添加新kconfig时,需在父目录的kconfig中添加source“source "arch/arm/父目录/子目录/Kconfig"”

注:移植内核时添加flash驱动,为何是修改arch/arm/plat-s3c24xx/commond-smdk.c文件就行呢?--------->

Vmlinux---->Image---->zImage---->uImage

uboot和linux内核移植,Uboot与kernel移植总结相关推荐

  1. uboot和Linux内核移植

    这篇文章是一个读者昨晚发给我的,文章很长,里面的细节也比较多,但是微信公众号只能发 50000 字的文章,如果想阅读全文. 请发送「 uboot和Linux内核移植 」到公众号后台获取下载链接. 这篇 ...

  2. NXP(Freescale) QorIQ T2080 u-boot与linux内核移植

    作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 参考 T2080RDB-PC ...

  3. 如何将u-boot和Linux内核移植到ADSP-SC589上

    注意:在一切工作开始之前,一定要保证PC端使用的是Ubuntu x86 32-bit,14.04版本的操作系统,否则可能会出现各种莫名其妙的问题. 1 开发环境设置 1.1 配置Linux主机 sud ...

  4. zedboard移植linux内核,在Zedboard上面使用xilinx发布的Linux内核与uboot

    有好多人想把xilinx发布的Linux内核与uboot应用到Zedboard上,可是完全按照digilent发布的内核和uboot来系统又无法正常工作,下面我就简单说一下我做的步骤 一 编译内核 从 ...

  5. u-boot的linux内核映像加载,基于U_Boot的Linux内核映像加载与引导功能实现.pdf

    基于U_Boot的Linux内核映像加载与引导功能实现 20 10 8 ( ) Aug . 2010 10 4 Journal of Langfang T eachers College( N atu ...

  6. uboot加载linux内核加载那些内容,uBoot和Linux内核中涉及到的几个地址参数的理解...

    uBoot和Linux内核中涉及到的几个地址参数的理解 ************************************************* arch/arm/Makefile //内核 ...

  7. 香橙派全志H3烧入U-boot和Linux内核以及配置

    全志H3烧入U-boot和Linux内核以及配置 1.U-boot的烧入和U-boot环境配置 1.1U-boot烧入和启动测试 2.编译完的内核处理和烧入 2.1处理内核 2.2烧入内核 U-boo ...

  8. linux内核 机器码,uboot 与 linux 内核机器码

    在u-boot和kernel中都会有一个机器码(即:MACH_TYPE),只有这两个机器码一致时才能引导内核,否则就会出现如下mach的错误信息: Error: unrecognized/unsupp ...

  9. T2080RDB-PC uboot 引导 Linux 内核启动

    T2080RDB-PC uboot 引导Linux 内核启动 3162412793@qq.com 技术交流QQ群:691976956 U-Boot 2016.012.0+ga9b437f (May 1 ...

  10. u-boot与linux内核间的参数传递过程分析

     转自:http://blog.csdn.net/u012075739/article/details/52252991 http://www.nishizawa23.com/ http://li ...

最新文章

  1. python3.6安装pygame-Pygame 框架安装教程(Python3.6为例)
  2. 快速记忆python函数-python入门(误)速记
  3. HashMap底层实现原理,红黑树,B+树,B树的结构原理,volatile关键字,CAS(比较与交换)实现原理
  4. Mac 访达之下方显示
  5. swoole 类中使用定时器
  6. 窥探JAVA WEB
  7. android:ImageView--scaleType属性
  8. python 图标字体_使用nerd-font/font-patcher为字体添加字体图标
  9. 前端工程师应该懂的ps基本操作
  10. 抖音直播引流的最快方法是什么?就简单两招破500人!
  11. 牛客网刷题记录——数理统计(累积记录)
  12. 1688item_search新品数据获取API接口调用示例
  13. 【Android -- 面试】简历模板
  14. IOS 蓝牙相关-BabyBluetooth蓝牙库介绍(4)
  15. Android中ExpandableListView控件的用法详解
  16. 基于LabVIEW的二维码识别程序
  17. hdu-4466-Triangle 数学题
  18. 编译u-boot-mini2440
  19. 自动注册activex控件
  20. JAVA毕设项目网上租房管理(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. 直播预告 | 共识、区块链和全球一体化经济
  2. cordova使用cordova-plugin-baidumaplocation插件获取定位
  3. linux 系统优化,调优
  4. Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 failed with exit code 1问题总结及解决方案...
  5. Linux系统抓包命令tcpdump使用实例
  6. jni releative
  7. 如何使用 Visual Basic 脚本添加默认打印机
  8. 试用版office 2010中提示Error opening SocialConnectorRes.dll求解!!
  9. 【修订】为什么OO方法是有本质缺陷的?
  10. china-pub,当当,卓越购书经验谈