Linux开发六_linux内核编译运行

Linux开发六

linux内核编译运行

象棋小子    1048272975

Linux是一个非商业化的产品,任何人都可以获得源代码并研究它。这吸引了很多开发者对其代码进行修改和完善,因此变得越来越流行。从小到手表,大到超级计算机集群,都可以看到Linux的身影。笔者此处就Linux内核的编译以及运行作一个简单的介绍。

1. bootloader

由于不同的cpu具有不同启动方式,所以Linux内核并不支持自启动,而是交由专门的一段代码进行处理,这段上电最先运行的代码被称为bootloader。bootloader一般具有下载固化以及加载运行这两个最基本的功能。对于arm架构的cpu,通常采用uboot作为bootloader,笔者此处针对s3c2416在MDK环境下实现一个简单的bootloader,该bootloader支持通过usb下载运行Linux内核,以加快调试开发。

2. Linux内核编译

可以从Linux内核官网http://www.kernel.org直接下载各个版本的Linux内核源码,此处我们采用4.10.10这个最新稳定版本的内核。

Linux内核支持目前市面上绝大部分处理器架构,如x86、arm、mips。跟架构相关的部分通常由相应的社区进行维护,所以想使用某款最新架构的cpu,想尽可能发挥其性能,使用其中最新的某些特性,往往需要采用最新的Linux内核。

解压Linux源码包,较新版本的Linux内核已经完整支持s3c2416了,所以我们可以无需改动任何的代码就可以让Linux内核运行在我们的s3c2416平台上。Linux是一个高度可配置的内核,需要先配置,然后再编译,这一过程需要注意以下几点:

2.1. 修改主目录Makefile

Makefile默认获取得是主机的架构以及编译环境,我们的内核是要运行在arm平台上,所以修改ARCH=arm,CROSS_COMPILE=arm-linux-。

2.2. 拷贝配置文件

我们基于s3c2410的配置文件进行配置,把arch->arm->configs文件夹中的s3c2410_defconfig拷贝到主目录,并命名成.config。

2.3. 内核配置

执行make menuconfig,进行Linux内核的配置。几个比较重要的配置如下:

2.3.1. Initramfs文件系统的支持

Linux内核启动到最后,会从根文件系统去加载执行第一个用户进程,从而把系统从内核空间转到用户空间。如果没有根文件系统或者没有可执行的用户进程,内核会直接panic。关于根文件系统的构建前面章节有简单的介绍,此处不再深入讨论,采用initramfs,用户程序实现每秒打印一次Helloworld。

2.3.2. ARM EABI

EABI即是嵌入式应用程序二进制接口,EABI相对于老的应用程序接口,具有更好的系统调用效率,更好的浮点实现,更好的兼容性等等。新的应用程序采用EABI接口是大势所趋。

2.3.3. 软浮点支持

s3c2416为arm926jes内核,没有硬浮点,必须配置成软浮点。

2.3.4. 看门狗关闭

关闭看门狗,避免看门狗复位影响测试。

2.3.5. 底层打印支持

支持底层打印,以确定Linux内核的启动情况。

2.4. 编译

执行make,进行编译,成功后会在arch->arm->boot目录下生成Image非压缩内核以及zImage压缩内核。

3. Linux内核运行

用sdboot工具把MDK编译出来的bootloader进行格式转换并下载进sd卡,设置板从sd卡启动,按住“空格键”上电,bootloader进入下载模式,选择3通过usb下载内核到ram并启动,在DNW工具提示USB:OK后,选择USBPort->Transmits,发送相应的Linux内核可执行文件Image/zImage。该方法直接下载内核进ram并启动,适用于内核调试开发。

在sd卡中创建一个image目录,把bootloader的Nand flash烧录版本二进制代码(未经过sdboot工具转换)命名成bootloader.bin,把Linux内核可执行文件zImage命名成kernel.bin,放入image目录,用来实现更新Nand flash上的bootloader以及内核代码。在bootloader下载模式选择6即可从sd卡更新bootloader以及内核到Nand flash,以后从Nand flash上启动即可。


图3-1 通过usb下载内核


图3-2 usb下载内核到内存并启动


图3-3 从Nand flash启动bootloader以及内核


图3-4 用户init进程Hello world打印

4. 附录

附录为MDK下的s3c2416 linux启动 bootloader工程,本章所述的根文件系统,linux内核源码。

mdk下s3c2416 linux启动bootloader工程以及根文件系统。

https://pan.baidu.com/s/1slczwhJ



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值