Ubuntu卸载切换内核版本
下面简单介绍一下修改Linux源代码,编译Linux内核,并且如何切换Ubuntu中的内核版本。
下面简单介绍一下修改Linux源代码,编译Linux内核,并且如何切换Ubuntu中的内核版本。
本文详细描述了如何在PC机虚拟机上定制一个能在arm64平台上安装的Ubuntu20操作系统iso。
大致过程分三步,
第一步基于目标板编译出对应的内核镜像包。
第二步用第一步编译出来内核镜像包替换官方发布的ubuntu-20.04.3-live-server-arm64.iso中的内核镜像包
第三步将替换了内核镜像包的ubuntu-20.04.3-live-server-arm64_customize.iso拷贝到U盘,通过目标板端的BIOS引导U盘启动安装。
GUI Guider是恩智浦提供的用户友好型图形用户界面开发工具,可通过开源LVGL图形库快速开发高品质的显示。GUI Guider的拖放编辑器可以轻松利用LVGL的众多特性,如小部件、动画和样式来创建GUI,而只需少量代码或根本无需任何代码。
掌握设备树是Linux驱动开发人员必备的技能,因为在新版本的Linux内核中,ARM相关的驱动全部采用的设备树,最新出的CPU及其驱动开发也基本基于设备树。比如ST出的STM32MP157、NXP的I.MX8系列等。我们所使用的Linux版本为4.1.15,其支持设备树。所以正点原子I.MX6U-ALPHA开发板的所有Linux驱动都是基于设备树的。
最近由于工作原因,需要在RK3568的一块开发板上部署NAS(网络附属存储)私有云的环境。一部分工作就是需要在板端把文件共享协议搭起来,方便客户端能随时随地访问到NAS的文件。目前在RK3568上跑的操作系统是一款开源的Linux操作系统,名为Armbian,Armbian是轻量级的Debian系统和为ARM开发板专门发行并重新编译的Debian系统(Ubuntu派生自Debian)。
需要安装部署的文件协议包括Samba、NFS、FTP、WebDav以及一个作者开发的基于浏览器访问的文件管理器chfs。
以下软件的安装均需要建立在板子能连接到互联网的基础上。
由于字符设备和块设备都很好地体现了“一切都是文件”的设计思想,掌握Linux文件系统、设备文件系统的知识非常重要。
首先,设备驱动最终通过操作系统的文件系统调用或C库函数(本质也基于系统调用)被访问。
其次,驱动工程师在设备驱动中不可避免地会与设备文件系统打交道,如Linux2.4内核的devfs文件系统和Linux2.6内核的基于sysfs的udev文件系统。
5.1节讲解了通过Linux API和C库函数在用户空间进行Linux文件操作的编程方法。
5.2节分析了Linux文件系统的目录结构,简单介绍了Linux内核中文件系统的实现,并给出了文件系统与设备驱动的关系。
5.3节和5.4节分别讲解Linux2.4内核的devfs和Linux2.6内核所采用的udev设备文件系统,并分析了两者的区别。
Linux设备驱动会以内核模块的形式出现,因此,学会编写Linux内核模块编程是学习Linux设备驱动的先决条件。
4.1-4.2节讲解了Linux内核模块的概念和结构,4.3-4.8节对Linux内核模块的各个组成部分进行详细讲解,4.1-4.2节与4.3-4.8节是整体与部分的关系。
4.9节讲解了独立存在的Linux内核模块的Makefile文件编写方法和模块的编译方法。
由于Linux驱动编程本质属于Linux内核编程,因此有必要掌握Linux内核及内核编程的基础知识。
3.1-3.2节讲解Linux内核的演变及Linux2.6内核的特点。
3.3节分析了Linux内核源代码目录结构和Linux内核的组成部分及其关系,并对Linux的用户空间和内核空间进行了讲解。
3.4节讲解了Linux2.6内核的编译及内核引导过程。另外,还描述了在Linux内核中新增程序的方法,驱动工程师编写的设备驱动也应该以此方式被添加。
3.5节讲解了Linux下C编程的命名习惯以及Linux所使用的GNU C针对标准C的扩展语法。
本章讲解底层驱动工程师必备的硬件基础,给出了嵌入式系统硬件原理及分析方法的全景视图。
2.1节讲解微控制器、微处理器、数字信号处理器
以及应用于特定领域的处理器
各自的特点。
2.2节对嵌入式系统中所使用的各类存储器与CPU的接口、应用领域及特点进行了详细讲解。
2.3节讲解常见的外设接口与总线的工作方式,包括串口、I2C、USB、以太网接口、ISA、PCI和cPCI等。
嵌入式系统硬件电路中经常会使用CPLD和FPGA,2.4节讲解了CPLD和FPGA在电路中的作用。
2.5-2.7节讲解实际项目开发过程中硬件分析的方法,包括如何进行原理图分析、时序分析以及如何快速地从芯片手册获取有效信息。
2.8节讲解了调试过程中常用仪器、仪表的使用方法,涉及万用表、示波器和逻辑分析仪。
1.1节讲解了设备驱动的概念和作用。
1.2节和1.3节分别讲述无操作系统和有操作系统情况下设备驱动的设计方法,通过分析讲解设备驱动与硬件和操作系统的关系。
1.4节对Linux操作系统的设备驱动进行了概要性的介绍,讲解设备驱动与系统软硬件的关系,分析了Linux设备驱动的重点难点和学习方法。
最后给出了一个设备驱动的“Hello World”实例,即最简单的LED驱动在无操作系统情况下和Linux操作系统下的实现。