嵌入式实训 Day3 Linux内核编译与服务器配置

【1】uboot烧写原理

SD卡制作启动盘:
cd sdfuse_q
./mkuboot.sh /dev/sdb SD卡的设备文件名 /dev 保存设备节点(文件名)
./sd_fusing_exynos4x12.sh /dev/sdb u-boot-fs4412.bin

1
2
3
echo "$2 fusing..."
dd iflag=dsync oflag=dsync if=$2 of=$1 seek=1 && \
echo "$2 image has been fused successfully."

if(inputfile)–输入文件—u-boot-fs4412.bin(2010)
of(outputfile)–输出文件— /dev/sdb
dd 将输入文件的内容复制给输出文件(复制的同时进行了格式转换)
本质:将uboot镜像固化到SD卡,SD卡成为启动盘

Linux文件类型:
b  (block 块设备文件)  具体表示是一种设备
c  (char 字符设备文件) 具体表示是一种设备
d  (目录)
-  (普通文件) .txt .dat
l  (链接文件)
s  (套接字文件)
p  (管道文件)
【2】重启网卡
sudo /etc/init.d/networking restart
【3】Linux内核配置编译

1)Makefile
198 ARCH ?= arm 默认X86
199 CROSS_COMPILE ?= arm-none-linux-gnueabi- 申明交叉编译工具链的前缀

2)导入默认配置
确保Linux内核镜像可以运行在当前产品中,支持当前的SOC
make exynos_defconfig
描述的是与SOC有关的代码对应的选项
cp arch/arm/configs/exynos_defconfig .config

.config 配置文件通知Makefile在编译内核镜像的时候,用来确定编译哪些文件

由顶层目录下的Makefile,调用子目录的中的Makefile协同完成源码的编译

.config保存的都是选项,每一个选项都会对应源码中的一个文件或者多个文件

3)make menuconfig 图形界面的选配
对上一步的完善,用户可以自定义选择选项,选项被选择,该选项所对应的文件被编译到内核镜像中‘
选项未选中,该选项所对应的文件肯定不会被编译到内核镜像中

4)make uImage 编译内核镜像

5)make dtbs 编译设备树文件

【4】tftp服务器

tftp远程传输协议
服务器端配置: sudo vi /etc/default/tftpd-hpa

3 TFTP_USERNAME=”tftp”
4 TFTP_DIRECTORY=”/tftpboot” 传输目录
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot
5 TFTP_ADDRESS=”0.0.0.0:69”
6 TFTP_OPTIONS=”-c -s -l”

启动服务器:
sudo service tftpd-hpa restart

【5】配置nfs服务器

配置server端:

1
2
3
4
5
6
7
 sudo vi /etc/exports

/source/rootfs/ *(rw,sync,no_subtree_check,no_root_squash)

/source 共享目录
sudo mkdir /source
sudo chmod 777 /source

rootfs 开发板需要访问的文件系统

启动nfs服务器:

1
sudo /etc/init.d/nfs-kernel-server restart
【6】bootloader

bootloader的操作的方式:自启动、交互

setenv 设置新的环境变量
saveenv 保存设置的环境变量
printenv 显示保存的环境变量

serverip 主机IP
ipaddr 目标机
bootcmd bootcmd 自启动命令(当uboot自启动时,默认操作该命令后的所有指令)
tftp addr uImage/exynos4412-fs4412.dtb 传输指令
bootm addr 启动地址上的镜像

bootargs uboot不执行该命令,uboot将该命令在启动内核之后,传递给内核,
内核会读取检验该命令,进而完成对文件系统的访问

【7】网卡驱动

1)设备树(网卡的信息)
设备树功能:描述硬件信息,内核在启动时,会解析设备树文件,将设备树中保存的硬件信息读取,保存
内核中的驱动可以通过读取的硬件信息,进而完成对硬件设备的控制
Linux3.0提供设备树的机制(结合数据结构中的树为思想)
设备树本质是文本文件,Linux内核中把该文件抽象为树型结构

1
2
3
4
5
6
7
8
9
10
11
12
/{
testnode1{
a = x;
};
testnode2{
testnode3{
b = y;
};

};

};

2)make menuconfig图形界面
选配选项 [*]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[*] Networking support  --->
Networking options ---> 网络配置 网络协议
<*> Packet socket
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: kernel level autoconfiguration

device Drivers ---> 设备驱动
[*] Network device support --->
[*] Ethernet driver support --->
<*> DM9000 support

File systems ---> 文件系统支持(支持nfs服务器的客户端)
[*] Network File Systems --->
<*> NFS client support
[*] NFS client support for NFS version 3 (NEW)
[*] NFS client support for the NFSv3 ACL protocol extension (NEW)
[*] Root file system on NFS (NEW)