找回密码
 注册
关于网站域名变更的通知
查看: 101|回复: 0
打印 上一主题 下一主题

uclinux内核配置与裁减

[复制链接]
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
     楼主| 发表于 2024-11-29 15:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    uclinux表示micro-control linux.即“微控制器领域中的Linux系统”,是Lineo公司的主打产品,同时也是开放源码的嵌入式Linux的典范之作。uCLinux主要是针对目标处理器没有存储管理单元MMU(Memory Management Unit)的嵌入式系统而设计的。它已经被成功地移植到了很多平台上。由于没有MMU,其多任务的实现需要一定技巧。
    ) J: o4 y% D7 ~$ a+ c
    uClinux是嵌入式Linux领域非常重要的分支,已成功应用于路由器、机顶盒、PDA等领域,与标准Linux在内存管理方面有着本质的区别。
    Uclinux的配置和裁减也是利用的华恒科技提供的源码包(用于hhbf531学习板)。我们使用的开发板信息如下:
    CPU:BF533
    FLASH:S29AL004D-512KB
    SDRAM:HY57V281620-16MB
    这里我不敢说“uclinux的移植”,而只是以“配置与裁减”代之,是因为我觉得自己的工作真的谈不上什么移植。现成的源码包,所有的底层驱动都已经完成,我们所要做的只是选择自己需要的驱动、配置一下内核、做一些裁减工作而已。每每听到其他人提到“最近又完成了TImes;TImes;TImes;平台的linux移植”,我都会有点担心:国内有多少工程师能真正从最初始的工作开始,完成一个平台的系统移植——应该很少吧。
    下面,我分以下步骤简单介绍一下我的配置过程。
    一,配置并在RAM中运行内核(不带根文件系统):
    由于我们的flash空间有限,在没有裁减之前,就算不带根文件系统,也无法烧写到flash内保存;所以先尝试下载到RAM中运行。另外,我们目前的开发板上没有网络功能,只能通过串口下载,所以在这里配置内核的过程中,做一些简单裁减,以便节约下载时间。
    解压源码包后,进入uclinux目录:
    #cd uClinux-dist
    设定交叉工具链:
    #PATH=”/usr/local/bin/gcc-bfin-3.4-uclinux/bin/:$PATH”
    进入配置:
    #make menuconfig
    运行后,进入“MainMenu”配置页,可以在此选择Vender/Product和Kernel/Library/Defaults等内容。根据我们使用的平台,我们选择:Vender-AnalogDevices,Product-HHBF533(或者HHBF531),Libc-uClibc;如果要配置内核和应用程序还要分别选中“Customize Kernel SetTIngs”、“Customize Vender/User Settings”。退出保存后,将依次进入配置内核和配置应用程序页。
    如果想单独配置内核,可以进入目录linux-2.6.x/内运行“make menuconfig”。配置应用程序在这个源码包里好像没有单独的config选项。这些关于内核源码包结构的基本知识,需要大家提前了解。
    下面,我们来配置内核。
    配置一个可以在我们的SDRAM中运行的内核很简单,因为底层工作都已经完成。我们只需要配置一下处理器相关内容即可。处理器选项位于内核配置页的“Blackfin Processer Options”。进入该配置页,进行如下配置:
    CPU - BF533
    System type - BF533-HHBF
    Board Customizations - 根据你的开发板时钟、SDRAM信息配置,其他不用修改。
    Clock Settings - 取消“Re-programClocks while Kernel boots”,默认为u-boot的时钟配置。
    其他选项不用修改,各项配置功能介绍见文档《附.Linux 2.6.19.x内核编译配置选项简介》。
    以上配置正确后,下载到你的开发板上,应该就可以运行了。但通过串口下载速度太慢,我们先去掉一些不需要的驱动。由于我们没有网络功能,所以把网络及其驱动全部取消,可以裁减150KB左右的空间;我们也不需要音视频功能,所以把音视频驱动也取消,又可以减小很大空间。如此配置后,我们可以尝试下载到SDRAM中运行了。
    现在,我们还不想裁减根文件系统,所以,我们想得到一个不带根文件系统的压缩内核镜像。由于华恒提供的源码包,编译后不能得到压缩的不带根文件系统的镜像,所以我们要通过修改Makefile得到我们需要的编译结果。
    需要修改的Makefile位于uClinux-dist目录下,打开该Makefile,在“.PHONY:linux”项的”ln –f $(LINUXDIR)/vmlinux $(LINUXDIR)/linux;\”语句后,添加以下内容。

    . C' F' g* r! v5 g 620)this.width=620;" style="cursor:pointer">
    " g/ ^$ _3 ?& b* l, y8 H
    这样在uClinux-dist目录下执行“make linux”就可以生成压缩的不带根文件系统的内核镜像了,该镜像文件为uImage.bin,位于linux-2.6.x目录内。现在,可以将得到的内核下载到SDRAM中运行了。因为是压缩内核,所以运行时要使用u-boot的bootm命令。至于u-boot命令的使用方法,自行学习。
    Makefile也是编译内核的基础知识,需要大家逐步掌握。
    这样,该步的工作就可以告一段落了。
    下载到SDRAM中,如果解压后无法运行,先检查一下上述配置操作是否有误。如果确定无误,就需要分析内核的执行过程,仔细分析问题了。接下来简单介绍一下内核执行流程。
    二,内核执行流程:
    承接上篇《u-boot引导uclinux过程分析》,介绍内核启动流程。
    A,内核vmlinux入口
    u-boot执行“(*appl)(cmdline);”语句后,控制权就移交给linux内核,appl变量指向的地址就是linux内核的首地址。
    Linux内核执行的第一个文件是/linux-2.6.x/arch/blackfin/mach-bf533/head.S。经过一系列的初始化,跳转到start_kernel()函数,即进入linux系统初始化阶段。
    B, Linux系统初始化
    Start_kernel()函数位于文件/linux-2.6.x/init/main.c中,是linux内核通用的初始化函数。无论对于什么体系结构的linux,都要执行这个函数。

    / X: a. w8 i& f% w) v5 X 620)this.width=620;" style="cursor:pointer">; r- w7 y; L- |- }2 a
    Start_kernel()函数负责初始化内核各子系统,最后调用rest_init(),启动一个叫作init的内核线程,继续初始化。

    $ ^* a; \/ x1 B8 |" y2 d! @  x( c
    8 U: `# x8 K3 ^) O
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-9-24 05:18 , Processed in 0.140625 second(s), 28 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表