我的github: https://github.com/WHJWNAVY

Linux内核移植步骤

嵌入式编程 Ann, Pepper 3799℃

——————————————————————————–

原创文章,转载请注明出处!

访问胡椒小兄弟http://www.wnavy.com会有更多精彩内容!

——————————————————————————–

 

往设备树中添加网卡驱动:

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

(1)、在Makefile中指定:

源码顶层目录下Makefile

ARCH                ?= $(SUBARCH)

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

改为:

ARCH                ?= arm

CROSS_COMPILE        ?=arm-linux-

(2)、编译时指定:

# make ARCH=arm CROSS_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,

second entry : data register.

– interrupt-parent : interrupt controller to which the device is connected

– interrupts : interrupt specifier specific to interrupt controller

Optional properties:

– davicom,no-eeprom : Configuration EEPROM is not available

– 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 = <0x05000000 0x2 0x05000004 0x2>;/*0x050000004412处理器的srom片选地址,详见手册*/

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

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

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

davicom,no-eeprom;

pinctrl@11000000 {


gpx0: gpx0 {

gpio-controller;

#gpio-cells = <2>;

interrupt-controller;

interrupt-parent = <&gic>;

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

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

#interrupt-cells = <2>;

};


}

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

设备树的Makefile文件在”xxx/linux3.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’ -d zImage uImage


 

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

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



.

转载请注明:胡椒小兄弟 » Linux内核移植步骤

喜欢 (2)or分享 (0)