XuSenfeng

个人站

复读了,更新随缘,有的文件不全或者图片缺失具体看我的笔记库(https://github.com/XuSenfeng/note)


Linux内核

目录

Linux内核

默认配置文件保存在arch/arm/configs文件下

/bin/sh: 1: lzop: not found
arch/arm/boot/compressed/Makefile:180: recipe for target 'arch/arm/boot/compressed/piggy.lzo' failed
make[2]: *** [arch/arm/boot/compressed/piggy.lzo] Error 1
make[2]: *** 正在等待未完成的任务....
  CC      arch/arm/boot/compressed/misc.o
arch/arm/boot/Makefile:52: recipe for target 'arch/arm/boot/compressed/vmlinux' failed
make[1]: *** [arch/arm/boot/compressed/vmlinux] Error 2
arch/arm/Makefile:316: recipe for target 'zImage' failed
make: *** [zImage] Error 2
make: *** 正在等待未完成的任务....

出现这个安装lzop

zImage存放在 ,./arch/arm/boot文件夹, 设备树存放在./arch/arm/boot/dts文件夹

编译单个的dts文件, 直接在顶层目录make对应的.dtb文件就行了

来源

内核官方, www.kernel.org, 有各个额版本的

NXP会挑选一个重点维护其中一个, 相当于官方的BSP或者说SDK供用户使用

正点原子使用NXP的Linux添加修改过的内核给用户时候用, 讲解的是NXP的内核

目录分析

  • arch: 架构相关zImage存放在/arch/arm/boot文件夹, 设备树存放在./arch/arm/boot/dts文件夹

  • bllock块设备相关, emmc等
  • crypto加密相关
  • Documentation:文档相关目录, 最常用的是devicetree/bindings这个目录下的描述设备树绑定的信息
  • firmeare: 固件相关的目录
  • fs: 文件系统相关
  • include: 头文件
  • init: 初始化相关
  • ipc: 进程之间通信
  • kernel: 内核相关
  • lib: 库相关
  • mm: 内存管理
  • net: 网络相关
  • samples: 例程
  • scripts: 脚本
  • security: 安全相关
  • sound: 音频相关
  • tools: 工具
  • urs:
  • virt: 虚拟化

生成的vmlinux, Image, zImage, uImage区别

vmlinux生成的最初的文件, 没有压缩, 很大

Image内核镜像文件, 取消掉一些符号表之类的信息

zImage: 使用gzip压缩的文件

uImage: 老板的uboot专用的镜像, 多加了一个头部

启动流程

移植

对已ing的配置文件存放在arch/arm/configs

直接移植官方的文件没有根文件系统, 发现可以正常启动

添加开发板

就是添加一个默认的配置文件, 一个设备树

在移植之前要保证可以正常的启动, , 使用现成的文件系统, 设置bootcmd和bootargs, Bootcmd通过网络启动

在运行的时候会使用bootcmd中的命令自动启动

=> setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'

设置串口以及默认的根文件

把usdhc2的内容更该为emmc版本

修改主频

使用root@ATK-IMX6U:~# cat /proc/cpuinfo可以查看cpu信息, BogoMIPS是Linux系统中衡量处理器运行速度的一个“尺子”,处理器性能越强,主频越高,BogoMIPS值就越大。BogoMIPS只是粗略的计算CPU性能,并不十分准确。但是我们可以通过BogoMIPS值来大致的判断当前处理器的性能。

进入到目录/sys/bus/cpu/devices/cpu0/cpufreq中,此目录下会有很多文件

cpuinfo_cur_freq:当前cpu工作频率,从CPU寄存器读取到的工作频率。

cpuinfo_max_freq:处理器所能运行的最高工作频率(单位: KHz)。

cpuinfo_min_freq:处理器所能运行的最低工作频率(单位: KHz)。

cpuinfo_transition_latency:处理器切换频率所需要的时间(单位:ns)。

scaling_available_frequencies:处理器支持的主频率列表(单位: KHz)。

scaling_available_governors:当前内核中支持的所有governor(调频)类型

scaling_cur_freq:保存着cpufreq模块缓存的当前CPU频率,不会对CPU硬件寄存器进行检查。

scaling_driver:该文件保存当前CPU所使用的调频驱动。

scaling_governor:governor(调频)策略,Linux内核一共有5中调频策略,

①、Performance,最高性能,直接用最高频率,不考虑耗电。

②、Interactive,一开始直接用最高频率,然后根据CPU负载慢慢降低。

③、Powersave,省电模式,通常以最低频率运行,系统性能会受影响,一般不会用这个!

④、Userspace,可以在用户空间手动调节频率。

⑤、Ondemand,定时检查负载,然后根据负载来调节频率。负载低的时候降低CPU频率,这样省电,负载高的时候提高CPU频率,增加性能。scaling_max_freq:governor(调频)可以调节的最高频率。

cpuinfo_min_freq:governor(调频)可以调节的最低频率。

可以在arch/arm/configs文件中文件中, CONFIGS_CPU_xxx设置各种模式的使用, 可以在图形界面进行配置, 一般把cpu的模式配置为ondemand模式, 在图形界面CPU Power Mangagement->CPU Frequency scaling -> Default CPUFreq governor (ondemand) —>进行设置