• 2009-08-11

    [Blackfin笔记]移植Linux内核(1)-编译内核

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://tigerwang202.blogbus.com/logs/43927976.html

    首先从Blackfin uClinux网站下载最新版uClinux内核。

    http://blackfin.uclinux.org/gf/project/uclinux-dist/frs/

    上述地址除了提供内核源代码外,还提供一些预编译的内核文件供特定电路板使用。如果使用ADI官方的验证板,可从中选择适合板子的编译好的内核文件。

    那些内核文件一般没有后缀扩展名,你在下载之后可以使用UNIX的file命令察看文件类型,例如:

    file linux-2.6.x/linux

    linux-2.6.x/linux: ELF 32-bit LSB executable, version 1 (SYSV), statically linked, not stripped

    ELF是预编译的存储器映像文件,它可直接下载至目标板。这些文件不需要编译,拿来就可直接使用。

    还有一类是tar.bz2为后缀的源代码压缩包文件,为了编译内核,你需要下载它。撰写本文时,笔者下载的是:

    uClinux-dist-2008R1.5-RC3.tar.bz2

    将其解压缩至项目根目录下的kernel文件夹。例如,笔者的内核源码放置在/home/uclinux/kernel/uClinux-dist-2008R1.5-RC3文件夹。

    tar –vxjf uClinux-dist-2008R1.5-RC3.tar.bz2

    在你为目标板建立内核的过程中,配置属于最初的阶段。内核配置的方法很多,而且配置设置时有很多选项可以选择。不管你使用哪种方法设定设置或者选择哪些配置选项,在你设定好配置后都将产生.config文件以及建立过程其余步骤将会用到的一些符号连接和头文件。

    以下的配置过程我们使用一个文本界面的设置程序,这也是最常用的设置方法。

    如果使用的是Debian系统,默认安装没有ncurses库的,使用make menuconfig会提示出错,需要先运行下列命令安装这个库:

    apt-get install libncurses5-dev

    切换至内核源代码目录,运行以下命令配置内核。该命令提供一个基于文本界面的友好的内核设置界面。

    make menuconfig

    注意:如果你先前从一个平台设置切换至另一平台,你需要先运行 make clean 命令,以避免编译内核时可能出现的错误。一个比较可靠地方式是:无论在什么时候,在你配置内核时,都运行make clean 命令。

    一些用户可能使用make xconfig命令来配置内核,这个命令提供一个图形化的配置。较新版本的内核可能要求你安装有QT图形库以运行make xconfig命令。如果,你没有安装那些库make xconfig命令会出错(例如Debian的默认安装就没提供QT库),这时可以使用 make menuconfig命令,它是除了基于文本界面外,其它功能都是相同的。或者,你可以使用下列命令安装QT库(仅适用于Debian)

    apt-get install tk8.4

    注:笔者下载的源码包使用TK的GUI库,故使用上述命令安装。

    下面的设置在menuconfig的文本设置界面中进行。

    在输入make menuconfig命令后,终端会输出一些信息,随后出现文本设置界面,如下图所示。

    image

    选择” Vendor/Product Selection”(生产商/产品选择)选项。

    image

    Vendor/Product Selection窗口中,请确认Analog Device被设置为Vendor(如上图所示)。这里,我们选择一块BF533-STAMP的验证板作为编译目标。(我们仅仅是为了演示整个编译过程,在下面的文章里将介绍如何添加自己的板子作为编译目标)在你选择一块验证板作为编译目标时,系统默认会根据该目标板的配置文件加载一些默认设置。

    选择<Exit>返回“Main Menu”界面。一个对话框会出现提示“是否新的内核设置”,选择“Yes”。

    选择“Kernel/Library/Defaults Selection”选项。出现“Kernel/Library/Defaults Selection”窗口。

    image

    选中“Customize Kernel Setting”和“Customize Vendor/User Settings”选项。选择的方法是在选择该条目的情况下按”Y”键。

    选择<Exit>返回主界面。选择Exit退出并保存设置。终端界面在执行一长串命令后,显示“Linux Kernel Configuration”界面。

    image

    在内核设置窗口中你可以进行各种内核选项和设备驱动设置。如果这是你第一次编译内核,在你不知道这些选项的确切意义之前,强烈建议你不要修改任何选项(因为我们练习的目的是熟练内核编译的流程,使用默认的选项就可以。)在下面的文章中你将学习如何设置内核使其适合特定的目标板。

    选择<Exit>退出设置。一个对话框会出现提示“是否新的内核设置”,选择“Yes”。

    image

    在终端执行一些命令后,出现“uClinux v3.2.0 Configuration”窗口。在这个窗口中,你可以设置各种应用程序(它们可能是ADI预先demo程序,用来演示uClinux上的一些特定应用,如音频、视频播放器等)。如果这是你第一次编译内核,还是建议保持缺省设置,不要做任何修改。

    选择<Exit>退出并保存设置。一个对话框会出现提示“是否新的内核设置”,选择“Yes”。

    提示:有些程序是实验性的,可能通不过编译或者导致不稳定。

    设置工作至此结束。运行下列命令开始编译。编译过程中将更新内核及根文件系统。编译将耗时5至10min,所需时间可能根据你选择组件的数量略有增加或缩短。如果在虚拟机中运行交叉编译器时间将成倍增长。

    image

    编译成功后会在images子目录下生成一大批可通过U-Boot加载至目标板的内核文件。这些内核映像文件将在下文中作详细讨论。关于U-Boot的详细信息请参考前几章节。


    收藏到:Del.icio.us
    Tag: