Linux内核选配编译步骤

来源:互联网 发布:邮币卡行情分析软件 编辑:程序博客网 时间:2024/04/28 21:50

简介:本文主要介绍了Linux内核的选配编译过程,并加入dm9000网卡驱动,通过nfs挂载根文件系统。由于本人为初学者,这是我的一篇学习笔记,有错误或不足之处还望您提出宝贵的建议。


平台介绍:

CPU:SAMSUNG Exynos-4412

开发板:iTop系列。

Linux内核版本:linux3.19.1

交叉编译器版本:arm-linux-gcc-4.6.4

宿主系统:REHL6.0


1、选平台,指定交叉编译工具链:

(1)、在Makefile中指定:

源码顶层目录下Makefile

ARCH                ?=$(SUBARCH)

CROSS_COMPILE        ?=$(CONFIG_CROSS_COMPILE:"%"=%)

改为:

ARCH                ?=arm

CROSS_COMPILE        ?=arm-linux-

(2)、编译时指定:

# make ARCH=armCROSS_COMPILE=/opt/arm-linux-gcc-4.6.4/bin/arm-linux-

 


 

2、导出缺省配置:

1)、直接把缺省配置文件改成.config“:

把“源码/arch/arm/configs”目录下的“xxxx_defconfig“(例如:”exynos_defconfig“)配置文件拷贝到源码顶层目录下,并改名为”.config“。

2)、使用make生成缺省配置:

# make exynos_defconfig

#执行该命令后系统会在源码顶层目录下自动生成.config“文件:

#configuration written to .config



 

3、往设备树文件中添加dm9000网卡驱动:

1)、参考与自己板子最接近的demo板的设备树文件生成自己的设备树文件(直接拷贝修改)。

设备树文件在”源码目录/arch/arm/boot/dts/exynos4412-fs4412.dts


2)、在设备树文件中添加网卡设备驱动信息(参考网卡厂商提供的范例代码):


示例代码在”Documentation/devicetree/bindings/net/davicom-dm9000.txt“,如下:

Davicom DM9000 Fast Ethernet controller

 

Required properties:

- compatible = "davicom,dm9000";

- reg : physical addresses and sizes of registers,must contain 2 entries:

    first entry: address register,

    secondentry : data register.

- interrupt-parent : interrupt controller to whichthe device is connected

- interrupts : interrupt specifier specific tointerrupt controller

 

Optional properties:

- davicom,no-eeprom : Configuration EEPROM is notavailable

- davicom,ext-phy : Use external PHY

 

Example:

 

       ethernet@18000000 {

               compatible = "davicom,dm9000";

               reg = <0x18000000 0x2 0x18000004 0x2>;

               interrupt-parent = <&gpn>;

               interrupts = <7 4>;

               local-mac-address = [00 00 de ad be ef];

               davicom,no-eeprom;

        };

修改并添加:


ethernet@05000000 {

                compatible ="davicom,dm9000";

                reg = <0x050000000x2 0x05000004 0x2>;/*0x050000004412处理器的srom片选地址,详见手册*/

                interrupt-parent =<&gpx0>;/*继承父节点*/

                interrupts = <6 4>;/*gpx0节点中断中的第6个,4是标志*/

                local-mac-address = [00 00 dead be ef];/*网卡地址*/

                davicom,no-eeprom;

 

pinctrl@11000000 {

...

gpx0: gpx0 {

gpio-controller;

#gpio-cells = <2>;

 

interrupt-controller;

interrupt-parent =<&gic>;

interrupts = <0 160>, <0 17 0>, <0 18 0>, <0 19 0>,/*中断<类型中断号中断标志>*/

     <0 20 0>, <0 21 0>, <0 220>, <0 23 0>;

#interrupt-cells = <2>;

};

...

}

 

4、修改设备树的Makefile文件:

设备树的Makefile文件在”xxx/linux-3.19.1/arch/arm/boot/dts“目录下。


1)、直接添加:


2)、为了加快编译速度,删除其他多余的设备树文件,仅保留自己的设备树文件:


 

5、内核选配:

1)、执行make menuconfig命令通过图形界面方式选配(在源码顶层目录下执行):

2)、添加网络协议支持:

3)、添加dm9000网卡设备驱动:

4)、添加nfs文件系统支持

 

6、保存配置,编译内核:

在源码顶层目录下执行”make“命令编译内核:

 

7,制作内核镜像:

gcc--编译内核-->vmlinux(elf头)--去elf头--->Image--压缩-->zImage----加u-boot特定格式头---->uImage

u-boot源码的tools会编译出一个x86下运行的应用程序”mkimage“打包uImage

 

把arch/arm/boot/zImage文件拷贝到源码根目录下,然后执行如下命令(要先把uboot生成的mkimage工具拷贝到源码根目录下):

./mkimage -A arm -O linux -T kernel -C none-a 0x41000000 -e 0x41000040 -n 'linux-3.19.1@wnavy' -dzImage uImage

 

 

8tftp下载内核镜像并通过nfs挂载根文件系统:

把编译好的内核景象uImage和设备树exnos4412-fs4412.dtb拷贝到tftp目录下,打开开发版电源启动内核并挂载文件系统。

 

简介:本文主要介绍了Linux内核的选配编译过程,并加入dm9000网卡驱动,通过nfs挂载根文件系统。由于本人为初学者,本文是我的一篇学习笔记,有错误或不足之处还望见谅。
0 0