起零网站建设,外贸网站建站电话多少,js做网站框架,客户管理软件免费目录 1 内核概述
1.1 内核与操作系统
1.2 Linux层次结构
1.3 Linux内核特点
2 Linux内核源码结构
2.1 Linux内核源码获取
2.2 源码结构
3 Linux内核移植
3.1 在 Linux 官网下载 Linux 内核源码#xff08;这里我们下载 linux-3.14.tar.xz#xff09;
3.2 拷贝内核源…目录 1 内核概述
1.1 内核与操作系统
1.2 Linux层次结构
1.3 Linux内核特点
2 Linux内核源码结构
2.1 Linux内核源码获取
2.2 源码结构
3 Linux内核移植
3.1 在 Linux 官网下载 Linux 内核源码这里我们下载 linux-3.14.tar.xz
3.2 拷贝内核源码包到 ubuntu 的家目录下解压并进入其顶层目录
3.3 源码并不知道我们的处理器架构及交叉编译工具是什么我们自己在 Makefile 中指定
3.4 指定使用的处理器
3.5 进入内核配置界面
3.6 配置内核
3.7 编译内核该过程可能需要二十分钟左右
3.8 编译设备树
3.9 测试内核和设备树
4 练习 1 内核概述
1.1 内核与操作系统
内核是一个操作系统的核心提供了操作系统最基本的功能是操作系统工作的基础决定着整个系统的性能和稳定性
操作系统是在内核的基础上添加了各种工具集、桌面管理器、库、shell、应用程序等
常用shell命令都在bin目录下即是可执行文件属于ubuntu系统不属于内核 开发板虽然没有ubuntu操作系统但是也可以使用这些命令都放在根文件系统下面
1.2 Linux层次结构 linux实现了五大功能进程管理、内存管理、文件系统、设备控制、网络
1.3 Linux内核特点
xi代码结构清晰、模块化设计 支持丰富的硬件平台 较高的稳定性 轻量化及较强的裁剪性 开放源代码更新活跃、用户较多、资料丰富支持丰富的网络协议 ... ...
2 Linux内核源码结构
2.1 Linux内核源码获取
Linux内核源码下载
https://www.kernel.org/ 单击
Index of /pub/ 找linux、kernel Linux内核版本命名
主版本号.次版本号.修订版本
学习用3.14
Linux内核版本选择
支持对应的硬件平台
相对成熟的版本资料多
稳定版本(次版本号为偶数的版本一般都是稳定版) 2.2 源码结构
平台相关代码
arch: 与CPU架构相关的源代码有许多cpu架构 平台无关代码
block:磁盘设备的支持
crypto:加密相关
drivers:设备驱动 自带了很多驱动如IIC
firmware:固件
fs:文件系统 很多种文件系统
include:头文件
init:内核初始化 比较重要的是main.c其中有一个init_start_kernel)
ipc:进程间通信
kernel:内核核心调度机制等
Kconfig:linux自带图形化相关代码
sounds音频驱动
lib:库
mm:内存管理
net:网络协议
scripts:工具、脚本等
security:安全
usr:打包与压缩
virt:虚拟
帮助文档、示例程序、工具等
COPYING: 版权
CREDITS: 内核贡献者
README: 说明文档 (大概信息
Documentation: 帮助文档 详细说明
Makefile: 编译管理 不是所有代码都参与编译可以让内核更小一些
samples: 示例
tools: 工具 ... ...
3 Linux内核移植 实验七 Linux 内核移植 【实验目的】 掌握 Linux 内核配置和编译的基本方法 【实验环境】 ubuntu 14.04 发行版 FS4412 实验平台 交叉编译工具 arm-none-linux-gnueabi- 【注意事项】 实验步骤中以“ $ ”开头的命令表示在 ubuntu 环境下执行以“ # ”开头的命令表 示在开发板下执行 【实验步骤】 3.1 在 Linux 官网下载 Linux 内核源码这里我们下载 linux-3.14.tar.xz https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/ 3.2 拷贝内核源码包到 ubuntu 的家目录下解压并进入其顶层目录 $ tar xvf linux-3.14.tar.xz
$ cd linux-3.14 3.3 源码并不知道我们的处理器架构及交叉编译工具是什么我们自己在 Makefile 中指定 $ vi Makefile 将 ARCH ? $(SUBARCH)
CROSS_COMPILE ? $(CONFIG_CROSS_COMPILE:%%) 修改为以下内容注意后边不要有多余空格然后保存退出 ARCH ? arm
CROSS_COMPILE ? arm-none-linux-gnueabi- 3.4 指定使用的处理器 之前讲到过arm下面有与CPU架构相关的源代码所以我们编译前需要配置 回到顶层目录下 $ make exynos_defconfig //make soc_name_defconfig 显示如下信息表示配置成功 ls-a才能查看到.config文件文件的格式如下y代表设置#注释掉了 注1soc_name为当前使用的处理器的名字 注2内核源码的arch/arm/configs下对各个厂商的soc都有一个默认配置文件 执行该命令后就会将对应的配置文件中的信息导入到源码顶层目录下的.config文件CONFIG_xxxy表示内核选中了该功能内核编译时就会将该功能对应的代码编译内核的体积也会增大#CONFIG_xxx is not set表示内核没有选中该功能内核编译时该功能对应的代码不会被编译内核的体积也会减小。 默认配置只能保证内核拥有最基本的功能我们需要根据自己的实际需求对内核做进一步的配置 方法1 直接修改.config文件不推荐 对依赖关系不是很清楚的时候直接配置是不推荐的。如配置nfs直接配置nfs不会生效因为nfs还依赖tcp/iptcp/ip还依赖与网卡驱动 方法2 make menuconfig 3.5 进入内核配置界面 用得最多的配置命令 $ make menuconfig 弹出如下图形化配置界面在该界面下我们可以对 linux 进行进一步的修改和配置 方向键可选择不同的选项‘ Enter ’键进入子菜单‘ Y’键选中某项功能‘N’键去除某项功能‘M’键将该功能编译成内核模块 两次‘ Esc ’键退出界面‘ ? ’键 为帮助选项‘/ ’键为搜索选项 注 1 若显示如下信息是因为 ubuntu 上没有安装对应的图形库 执行如下命令安装对应的图形库然后重新执行 make menuconfig 即可 $ sudo apt-get install libncurses5-dev 注 2若显示如下信息是因为终端窗口太小需将终端最大化后再执行 3.6 配置内核 将‘ System Type ’菜单下的‘ S3C UART... ’修改为 2 即使用 UART2 System Type ---(2) S3C UART to use for low-level messages 设置完成后通过方向键选择‘ Save ’保存即可然后选择‘ Exit ’退出该配置界面 3.7 编译内核该过程可能需要二十分钟左右 $ make uImage //编译内核编译选为“*”的选项到内核// 补充内核编译以下命令均在内核源码的顶层目录下执行
// make uImage
// 编译内核编译选为“*”的选项到内核
// make modules
// 编译内核模块编译选为“M”的选项为独立模块
// make dtbs
// 编译设备树将设备树源文件dts编译为二进制文件dtb
// make clean
// 删除编译过程中产生的中间文件编译后报错 看提示最后使用了OBJCOPY工具把vmlinux.elf转换为了zimage.bin文件。不过我们需要uImage 注如图所示第一次在 ubuntu 上编译 Linux 内核会提示缺少一个 mkimage 命令 该命令可在 uboot 源码中 u-boot-2013.01/tools/ 目录下获取必须是编译后的 uboot 将该命令拷贝到 ubuntu 的 /usr/bin 目录下即可正确编译内核 $ sudo cp u-boot-2013.01/tools/mkimage /usr/bin/ 给该命令添加可执行权限 $ sudo chmod 777 /usr/bin/mkimage 完成后回到内核的顶层目录下重新编译内核即可 再次看一下信息最后也显示如下信息表示编译成功即在源码的 arch/arm/boot/ 目录下生成了 uImage 镜像 3.8 编译设备树 设备树概念通常用于嵌入式系统的引导过程和设备驱动程序的管理。linux采用驱动逻辑和硬件信息相分离的模式。逻辑信息放在uImage里driver目录下如点哪个灯硬件信息放在设备树如灯的寄存器这样的好处 灵活性使用分离的DTB允许在不重新编译内核的情况下更改硬件描述。这使得可以在不同的硬件平台上共享相同的内核镜像只需加载不同的DTB即可。 精简内核使用分离的DTB可以使内核镜像更加精简因为不同的硬件描述可以通过不同的DTB文件加载而无需将所有硬件描述都编译进内核。 维护性设备树的独立性意味着可以在不影响内核的情况下对硬件进行更改和维护。 不同开发板都有不同的设备树把所支持的开发板设备树都写了一遍。 内核源码中并没有 fs4412 平台的设备树文件这里我们从源码支持的平台中找一个硬件与我们最类似的在其基础上进行修改这里我们参考的是 samsung 公司的 origen 拷贝 origen 的设备树并将其重命名 $ cp arch/arm/boot/dts/exynos4412-origen.dts arch/arm/boot/dts/exynos4412-fs4412.dts 因为添加的设备树文件也要编译所以对应的 Makefile 也要修改 $ vi arch/arm/boot/dts/Makefile 在 exynos4412-origen.dtb \ 后添加如下内容然后保存退出 exynos4412-fs4412.dtb \ 回到源码的顶层目录下编译设备树 $ make dtbs //编译设备树将设备树源文件dts编译为二进制文件dtb显示如下信息表示编译成功即在arch/arm/boot/dts/目录下生成了exynos4412-fs4412.dtb 3.9 测试内核和设备树 将编译生成的内核和设备树拷贝到 tftp 的工作目录 $ sudo cp arch/arm/boot/uImage /tftpboot
$ sudo cp arch/arm/boot/dts/exynos4412-fs4412.dtb /tftpboot/
$ sudo chmod 777 /tftpboot/* 设置 uboot 的启动参数并保存 # setenv ipaddr ***.***.***.***
# setenv serverip xxx.xxx.xxx.xxx
# setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm
41000000 - 42000000
# setenv bootargs root/dev/nfs nfsrootxxx.xxx.xxx.xxx:/opt/4412/rootfs/ rw
consolettySAC2,115200 init/linuxrc ip***.***.***.***
# saveenv 注 1xxx.xxx.xxx.xxx 为 ubuntu 主机的 ip***.***.***.***为开发板的 ip必须和 ubuntu 主机的 ip 在同一个网段根据自己电脑情况进行设置 注 2 以上设置手动输入命令粘贴可能会有中文符号 回到 ubuntu 重 启 tftp 和 nfs 服务器 $ sudo service tftpd-hpa restart
$ sudo service nfs-kernel-server restart 重启开发板查看现象如图所示内核在启动到一半时会崩溃卡死原因在于我们在该 实验中只是对 UART 进行了配置而其他功能都保持默认选项内核默认配置中没选 配我们使用的网卡驱动、nfs 等功能所以在挂载根文件系统时导致内核崩溃所以后 续我们还需要配置网卡驱动、nfs 等 查看目录 DM9000网卡未参与编译去3.5配置界面选成M再次编译make uImage 编译后 dm9000.ko即内核模块可以安装到 linux内核也可以单独卸载
4 练习
1.简述内核和操作系统的关系 2.简述为什么嵌入式开发中一般都使用Linux内核 3.简述.config文件的作用以及.config文件和make menuconfig的关系 4.简述make menuconfig界面中[ ]选项和选项的区别
答
1内核是一个操作系统的核心提供了操作系统最基本的功能是操作系统工作的基础决定着整个系统的性能和稳定性操作系统是在内核的基础上添加了各种工具集、桌面管理器、库、shell、应用程序等
2 linux内核代码结构清晰、模块化设计、支持丰富的硬件平台、较高的稳定性、轻量化及较强的裁剪性、开放源代码
更新活跃、用户较多、资料丰富、支持丰富的网络协议
3 .config是内核编译时选择内核模块的配置文件y代表选中该功能#CONFIG_xxxis not set 代表没有选中该功能.config 时直接使用的配置文件make menuconfig是可以使用图型化界面修改.config本质一样但是menuconfig 可以避免对依赖关系不清楚而导致配置错误或者误操作更推荐
4 * 代表选中编译到内核中 空代表未选中 M代表被选为模块