嵌入式内核初学习

要学习ARM-Linux内核,得先移植到开发板上去运行了,才有兴趣进行下一步的研究。人就是这样,没先看到现象就不太愿意去详细学习。

首先得要一个供学习的内核,可以到相应网站下载内核,不一定是官网,官网一般提供最新的或是一直在维护,我们一开始学的时候就不要去用内核版本高的,里面添的东西太多,反倒不是学习的首选。

一、接下来就得移植ARM-Linux内核到开发板,移植过程一般有三种方式:

1)、直接在解压后的内核文件夹(linux不是这样叫的,我为了好理解)中,使用  make menuconfig 命令一个一个进行配置。一个内核文件数多达2万个,可想对刚入门不久的人难度是多大,所以此不适合菜鸟,只适合传说中的牛人;

2)、使用默认配置,在默认配置的基础上进行修改(此方法难度也有,但相对第一种方法那就没什么了);

3)、使用厂家提供的配置文件(在买开发板的时候,厂家肯定会给你带一些厂家提供的资料,没资料咱不买就是);

这里讲下后两种方法,对于第二种方法先要改一下相应的文件:

a)、顶层Makefile: ARCH = arm 和 CROSS_COMPILE = arm-linux-,不修改这里编译出来的文件是X86架构的。

b)、修改平台输入时钟,这里对着自己的芯片改,我用的的四12MHZ的;

c)、修改机器码ID,此机器码ID就是U-boot传进来的ID号,如果不修改ID号,它会提示你说你的ID号不匹配;

这里可能讲的不是很细,都的自己去慢慢摸索,错了他都会给你错误提示,对着提示慢慢改。

对于第三种,那就就简单。首先把厂家的config复制到 .config中,再执行 make menuconfig 进入配置界面,根据自己需要慢慢配置、剪裁。最后执行 make zImage 就等着它慢慢编译。最后会在 arch/arm/boot中找到需要的zImage文件。

  二、简要分析下内核启动

移植内核的目的就是,在ARM-Linux操作系统上运行运用程序。

内核的工作:1、处理u-boot传入的参数;

a)、判断是否支持CPU和单板,此过程是用汇编写的;

b)、建立页表;

c)、enable mmu;

d)、跳转到start_kernel(内核的第一个C程序)

2、挂接根文件系统;

3、执行应用程序

其只要涉及的函数如下:arch/arm/kernel/head.s

    start_kernel

setup_arch

setup_command_line

reset_init

kernel_init

prepare_namespace

mount_root

init_post



你可能感兴趣的:(嵌入式内核)