1.Linux操作系统概述
1.操作系统
操作系统可以被看做是一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核。内核的接口被称为系统调用。公用的函数库构建在系统调用接口之上,应用程序可以使用公用函数库,也可以使用系统调用。shell是一种特殊的应用程序,为运行其他应用提供了一个接口。

2.Linux内核组成
Linux内核并非铁板一块,而是由五个核心子系统相互协作、共同构成的。Linux内核主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)5个子系统组成。理解这五个子系统,就掌握了Linux运行的命脉:
- 进程调度 (SCHED):掌控着系统中多个进程对CPU的访问权。它确保各个程序能够公平、高效地共享CPU时间,让系统看似在同时运行多个任务。
- 内存管理 (MM):控制多个进程安全地共享主内存区域。它负责内存的分配、回收以及虚拟内存映射,防止进程间互相越界访问。
- 虚拟文件系统 (VFS):这是Linux极其伟大的设计。它隐藏了各种硬件的具体细节,为所有设备提供了统一的接口,让上层应用无需关心底层差异。
- 网络接口 (NET):提供了对各种网络标准的存取和各种网络硬件的支持,是Linux在服务器领域大放异彩的核心支撑。
- 进程间通信 (IPC):支持进程之间的数据交换与同步,如管道、消息队列、共享内存等,让多进程协同工作成为可能。
这五大子系统互相依赖,比如进程调度需要内存管理来分配进程的地址空间,而网络接口和文件系统又依赖进程调度来并发执行任务。

3.Linux设备驱动与整个软硬件系统的关系
除了网络设备外,字符设备与块设备都被映射到Linux文件系统的文件和目录。通过调用open、read、write、close等即可访问字符设备和块设备。所以这就是Linux的"一切皆是文件"的思想。Linux块设备有两种访问方法:一种是类似于/dev/sda、/dev/sdb的原始块设备,一种是在块设备上简历FAT、EXT4、BRTFS等文件系统,然后以文件路径的形式进行访问。
在Linux中,针对NOR、NAND等提供了独立的存技术设备(Memory Technology Device,MTD)子系统,其上运行YAFFS2、JFFS2、UBIFS等具备擦除和负载均衡能力的文件系统。针对磁盘或Flash设备的FAT、EXT4、YAFFS2、JFFS2、UBIFS等文件系统定义了文件和目录在存储介质上的组织。而Linux的虚拟机文件系统则统一对它们进行了抽象。

对于驱动开发者来说,最重要的理念莫过于**"一切皆是文件"**。在Linux中,除了网络设备外,字符设备与块设备都被映射到了Linux文件系统的文件和目录中(比如 /dev 目录下的节点)。
这意味着,应用程序可以通过标准的 open()、read()、write()、close() 等文件操作函数,直接访问底层的字符设备和块设备。这种极致的抽象,极大降低了应用层编程的难度。
针对不同类型的存储介质,Linux的访问方式也有所区别:
- 块设备访问 :有两种方式。一种是直接读写原始块设备文件(如
/dev/sda);另一种是在块设备上建立FAT、EXT4、BTRFS等文件系统,然后以文件路径的形式进行挂载访问。 - Flash介质访问(MTD子系统):针对NOR Flash、NAND Flash等,Linux提供了独立的**内存技术设备(MTD)**子系统。由于Flash存在擦写寿命和坏块问题,MTD之上通常运行YAFFS2、JFFS2、UBIFS等具备擦除均衡和负载均衡能力的专用文件系统
最终,不管是哪种文件系统(FAT、EXT4还是YAFFS2),它们定义了文件和目录在存储介质上的组织方式,而**虚拟文件系统(VFS)**则统一对它们进行了抽象。
2.环境搭建
1.双网卡网络配置
1.概念:
在嵌入式开发中,Ubuntu需要一个网卡与开发板连接,用来实现基于网络的tftp(文件传输)及nfs(目录共享)服务功能。如果Ubuntu想使用apt-get工具访问软件源下载软件,或想访问百度时就会非常不方便,此时我们可以通过设置双网卡来实现既能上网又能与开发板通信的效果。
2.虚拟机网络模式:
1.桥接模式:
桥接模式的组网方式如下:

Ubuntu虚拟机通过桥接模式以192.168.1.100作为IP地址来操作网卡,Windows系统则通过
192.168.1.200作为IP地址操作网卡,两个IP地址均是存在的,所以Ubuntu可以作为独立的IP地址来进行网络操作。
该模式主要功能及局限性为:
作为服务器时必须选择桥接模式,因为服务器必须有真实IP地址,这样才能在网络中被找到。
Ubuntu与Windows作为独立的IP地址来上网,Ubuntu网络是否正常与Windows是没有关系的,两者网络连接状态是独立的。
如果在校园网等需要拨号上网的场景下,这种模式可能导致Ubuntu无法上外网,因为拨号上网通常一个账号只能获得一个IP地址,同时为Ubuntu和Windows分配地址。
2.NAT模式:
NAT模式的组网方式如下:

Ubuntu虚拟机通过NAT模式工作时,Windows会认为Ubuntu系统是工作在其上的一款软件,因此会为Ubuntu系统虚拟一个不存在的网卡,即192.168.XX.XX(此IP地址可以通过软件配置),如果Windows是能够正常上网的,那么Ubuntu一定也是能够上网的。
该模式的主要功能及局限性为:
上网方式简单,Windows有网的情况下,Ubuntu想要上网,配置为NAT模式是最简单快捷的。
NAT模式因为Ubuntu地址是虚拟IP地址,所以不能作为服务器IP地址,在网络中也是无法被找到
的。
如果只是想Ubuntu上网,而不需要作为服务器被网络终端访问,推荐配置为NAT模式。
双网卡组网方案
我们的终极方案是:适配器1用NAT上公网,适配器2用桥接连开发板。
-
添加并配置网卡 :在VMware中添加两个网络适配器。适配器1设为NAT模式,适配器2设为桥接模式(注意必须桥接到电脑的有线网卡 上)。

-
配置虚拟网络 :在虚拟网络编辑器中,将NAT网卡的网段统一设为
192.168.78.0,方便后续管理。
-
配置Ubuntu内部IP :修改
/etc/network/interfaces文件:
- NAT网卡(如ens33):配置为DHCP自动获取IP。
- 桥接网卡(如ens36):配置为静态IP
192.168.1.100(与开发板同网段)。
-
路由配置(关键排坑) :重启后使用
route命令查看路由,如果默认路由走的是桥接网卡(ens36),虚拟机将无法上公网!必须删除错误路由并添加正确路由:bashsudo route delete default sudo route add default gw 192.168.78.2 ens33 -
开机自启动 :为避免每次开机都要敲路由命令,我们创建一个
systemd服务(如custom-route.service)来实现开机自动配置路由。
完成上述配置后,在Ubuntu中 ping www.baidu.com 和 ping 192.168.1.50(开发板IP),双网即可畅通无阻!