新闻中心

EEPW首页>嵌入式系统>设计应用> uclinux内核配置与裁减

uclinux内核配置与裁减

作者: 时间:2018-08-31 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/201808/388125.htm


起始内核线程init的任务依然是初始化,只不过是一种更高层次的初始化。


函数do_basic_setup()是init进程中最重要的函数,与嵌入式系统关系最紧密的是其中的do_initcalls()函数,该函数与设备驱动程序加载有关。

函数prepare_namespace()函数主要目的是准备好系统的命名空间,其中最重要的函数是mount_root(),其功能是挂载根文件系统。

四个run_init_process()函数查找init进程程序并尝试执行。如果没有找到一个可以执行的init程序,则报告错误“Noinit found”。

C,初始化设备驱动

参考B中的do_basic_setup()函数。

D,挂接根文件系统

参考B中的prepare_namespace()函数。

E, 启动用户空间init进程

当内核挂载了根文件系统后,内核的启动工作就全部结束了,但系统还不能正常启动起来,因为还需要通过根文件系统上的init程序来完成一下最后的设置工作。这个init程序一般在/sbin、/etc或/bin目录下。

三,裁减内核(不带根文件系统)并烧写到flash中:

该步承接上步的工作。由于上步已经做了一定的裁减,该步只需要在此基础上进一步裁减即可。该步工作相对叫简单,只需要将不需要的驱动选项取消即可,当然要注意保证内核的依赖关系。

我们的flash容量为512KB,u-boot占有64KB空间,剩下的只有448KB。另外,根文件系统大约还需要100KB空间,所以内核大小要控制在350KB以内。我们先尝试将不需要的驱动和选项全部取消,让内核运行起来。

在“二,配置并在RAM中运行内核(不带根文件系统)”的基础上,我们进一步删除的驱动包括:

l 取消“Loadble module support”支持

l 取消“Block layer”支持

l 取消“Bus options”所有支持

l 取消“Power management options”支持

l 取消“CPU Frequency scaling”支持

l 取消“Profiling Support”支持

l 取消“Security options”支持

l 取消“Cryptographic options”支持

l 取消除了串口和MTD以外的所有硬件驱动支持

l 取消内部RTC驱动

l 取消对ELF格式文件支持

取消以上选项后,内核可以控制在350KB以内了。所以,不需进一步修改Makefile来裁减内核了。这样就可以下载并烧写到flash内保存了。

四,配置应用程序和裁减根文件系统:

根文件系统挂载到内核有两种基本方式:独立于内核存放通过MTD分区识别并挂载和链接到内核数据段通过ramdisk挂载(两种方式都是我自己概括的,可能描述上有些不尽合理,仅供参考)。不论那种方式,都需要MTD驱动支持,所以内核要支持MTD并配置正确,保持华恒源码包原MTD配置即可。

HHBF5XX 的Linux BSP 使用ext2 格式的ramdisk 作为根文件系统,直接链接到内核数据段,所以这里介绍这种方式。另一种方式这里不作介绍,其相关资料更丰富。

与根文件系统(ramfs)相关的链接内容如下,位于文件/linux-2.6.x/arch/Blackfin/Kernel/vmlinux.lds.S中。


内核通过__initramfs_start和__initramfs_end找到根文件系统的img,这两个变量在文件/linux-2.6.x/init/Initramfs.c中被引用。

介绍完根文件系统的挂载方式,我们来介绍如何配置和裁减应用程序。

由于flash容量限制,而且我们也并不需要很多应用程序的支持,所以我们可以只保留最简单的init、sh、ls、cd等应用程序,其他应用全部裁减掉。注意必须保证要有init和sh,否则内核无法运行或没有shell界面。另外,为了进一步裁减体积,我们利用busybox制作根文件系统,busybox的介绍文档网上非常多,这里不再介绍。

按照以上分析,我们来配置应用程序和busybox。

按照“一,配置并在RAM中运行内核(不带根文件系统)”中介绍的方法进入应用程序配置页。只需选中Busybox内的BusyboxSVN,其余选项全部取消,完全用busybox代替。

然后,我们来配置busybox。进入busybox目录,运行配置命令:

#cd user/busybox-svn

#make menuconfig

除了按照我们上面介绍的,保留最基本的应用程序之外,其他全部取消;还有一点需要特别注意。就是在“Build options”选择中选中编译成静态库,而不要编译成共享库,这样在根文件系统挂载时省去很多麻烦,虽然最后得到的内核体积会稍微增大一下。共享库的应用可以在内核运行成功后,进一步学习。

这样配置得到的根文件系统已经裁减了很大体积,但下载到SDRAM中运行时会发现根文件系统占有的内存空间仍然很大,始终保持12.5MB空间。这是因为,根文件系统的运行空间是在生成镜像时指定的。要裁减占有的内存空间,可以如下修改。

#vi vender/HHTech/BF533-HHBF/Makefile

修改第14行的“BLOCKS = 12800”为较小的值,比如说4096等,必须是256的整数倍,否则内核运行时根文件系统报错。这样修改后,根文件系统占有的flash和SDRAM空间都会相应减小。

通过以上裁减后,带有根文件系统的内核镜像完全可以控制在448KB以内,下载保存到flash后运行,你就可以看到可爱的“”欢迎界面了。



关键词:内核配置uClinux

评论


相关推荐

技术专区

关闭