【实验目的】
掌握 Linux 内核配置的基本方法,完成对网卡驱动、NFS 等相关功能的配置
【实验环境】
- ubuntu 14.04 发行版
- FS4412 实验平台
- 交叉编译工具:arm-none-linux-gnueabi-
【注意事项】
- 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行,以“#”开头的命令表
示在开发板下执行
【实验步骤】
-
在内核源码的顶层目录下执行如下命令,修改内核配置
$ make menuconfig
给内核选配 DM9000 网卡驱动,然后选择“Save”保存
Device Drivers --->
[*] Network device support --->
[*] Ethernet driver support --->
<*> DM9000 support
因为内核要使用 NFS 去挂载根文件系统,而 NFS 是基于 TCP 协议实现的,所以这里需
要选配 TCP 相关的网络协议(部分功能默认已经选配),然后选择“Save”保存
[*] Networking support --->
Networking options --->
<*> Packet socket
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: kernel level autoconfiguration
因为内核要使用 NFS 去挂载根文件系统,所以需要给内核选配 NFS 客户端及相关功能
File systems --->
[*] Network File Systems --->
<*> NFS client support
<*> NFS client support for NFS version 3 (NEW)
[*] NFS client support for the NFSv3 ACL protocol extension
[*] Root file system on NFS
设置完成后通过方向键选择‘Save’保存即可,然后选择‘Exit’退出该配置界面
-
在设备树中添加网卡的硬件信息
$ vi arch/arm/boot/dts/exynos4412-fs4412.dts
在文件的末尾,最后一个花括号前添加如下内容(即要写在根节点之内)
srom-cs1@5000000 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x5000000 0x1000000>;
ranges;
ethernet@5000000 {
compatible = "davicom,dm9000";
reg = <0x5000000 0x2 0x5000004 0x2>;
interrupt-parent = <&gpx0>;
interrupts = <6 4>;
davicom,no-eeprom;
mac-address = [00 0a 2d a6 55 a2];
};
};
-
修改时钟相关配置(忽略无用的时钟)
$ vi drivers/clk/clk.c
将
static bool clk_ignore_unused;
修改为以下内容,然后保存退出
static bool clk_ignore_unused=true;
-
修改 EMMC 相关配置
$ vi drivers/mmc/core/mmc.c
将
if (card->ext_csd.rev > 7) {
pr_err("%s: unrecognised EXT_CSD revision %d\n",
mmc_hostname(card->host), card->ext_csd.rev);
err = -EINVAL;
goto out;
}
修改为以下内容,然后保存退出
#if 0
if (card->ext_csd.rev > 7) {
#else
if (card->ext_csd.rev > 8) {
#endif
pr_err("%s: unrecognised EXT_CSD revision %d\n", mmc_hostname(card->host), card->ext_csd.rev);
err = -EINVAL;
goto out;
}
-
编译内核和设备树
$ make uImage $ make dtbs
-
测试内核和设备树
将编译生成的内核和设备树拷贝到 tftp 的工作目录$ sudo cp arch/arm/boot/uImage /tftpboot $ sudo cp arch/arm/boot/dts/exynos4412-fs4412.dtb /tftpboot/ $ sudo chmod 777 /tftpboot/*
重启 tftp 和 nfs 服务器
$ sudo service tftpd-hpa restart
$ sudo service nfs-kernel-server restart
重启开发板查看现象,如图所示,此时 Linux 内核已经能通过 NFS 去挂载根文件系统
在终端下执行‘ls’命令我们就能看到根文件系统中的内容