手把手带你自制Linux系统之四 添加网络功能

私人定制:linux系统 简介本文主要通过裁剪现有Linux系统,打造一个属于自己的Linux小系统,让其能够装载网卡驱动,并配置IP地址,实现网络功能。主要步骤: 添加硬盘 对硬盘进行分区,并创建文件系统 创建挂载点/mnt/boot和/mnt/root并挂载 安装grub 复制虚根和内核 编写grub.conf配置文件 创建一级子目录,如/bin,/lib等 复制bash和相关库文件及其他命令 添加网络功能,并实现开机自 阅读详情

手把手带你自制Linux系统之四 添加网络功能


1. 添加系统函数库

/etc/rc.d/init.d/functions脚本文件中定义了许多功能函数,用于控制服务脚本的信息显示等。/etc/init.d下的绝大多数脚本或多或少都会使用这些功能。例如在CentOS开机启动时,会看到执行某项操作或启动某个服务是成功还是失败,在右侧会有一个用中括号括起来的单词表示,成功用绿色的OK,失败用红色的FAILED,如图所示:



接下来,就添一个functions文件,其中定义两个函数来实现这样的功能。
vi /mnt/sysroot/etc/rc.d/init.d/functions

内容如下:
SCREEN=`stty -F /dev/console size 2>/dev/null`
COLUMNS=${SCREEN#* }
[ -z $COLUMNS ] && COLUMNS=80
 
SPA_COL=$[$COLUMNS-14]
 
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033\34m'
NORMAL='\033[0m'
 
 
success() {
  string=$1
  RT_SPA=$[$SPA_COL-${#string}]
  echo -n "$string"
  for I in `seq 1 $RT_SPA`;do
    echo -n " "
  done
  echo -e "[   ${GREEN}OK${NORMAL}   ]"
}
 
failure() {
  string=$1
  RT_SPA=$[$SPA_COL-${#string}]
  echo -n "$string"
  for I in `seq 1 $RT_SPA`;do
    echo -n " "
  done
  echo -e "[ ${RED}FAILED${NORMAL} ]"
}   

使用bincp.sh移植命令:seq

functions文件的使用方法很简单,只需要在使用功能函数的脚本中source一下/etc/rc.d/init.d/functions即可。function文件中定义了两个shell脚本函数:success和failure,分别在右侧显示绿色的[OK]或红色的[FAILED]


2. 初始化网卡驱动

首先查看网卡信息:

[root@localhost ~]# lspci | grep -i ethernet
02:01.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)

查看网卡的驱动模块:
[root@localhost ~]# lsmod | grep -i PCnet32
pcnet32                35269  0 
mii                     9409  1 pcnet32

查看pcnet32模块信息可以发现pcnet32依赖mii模块:
[root@localhost sysroot]# modinfo pcnet32
filename:       /lib/modules/2.6.18-194.el5/kernel/drivers/net/pcnet32.ko
license:        GPL
description:    Driver for PCnet32 and PCnetPCI based ethercards
author:         Thomas Bogendoerfer
srcversion:     F81443556AAE169CBF80F55
alias:          pci:v00001023d00002000sv*sd*bc02sc00i*
alias:          pci:v00001022d00002000sv*sd*bc*sc*i*
alias:          pci:v00001022d00002001sv*sd*bc*sc*i*
depends:        mii
vermagic:       2.6.18-194.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
parm:           debug:pcnet32 debug level (int)
parm:           max_interrupt_work:pcnet32 maximum events handled per interrupt (int)
parm:           rx_copybreak:pcnet32 copy breakpoint for copy-only-tiny-frames (int)
parm:           tx_start_pt:pcnet32 transmit start point (0-3) (int)
parm:           pcnet32vlb:pcnet32 Vesa local bus (VLB) support (0/1) (int)
parm:           options:pcnet32 initial option setting(s) (0-15) (array of int)
parm:           full_duplex:pcnet32 full duplex setting(s) (1) (array of int)
parm:           homepna:pcnet32 mode for 79C978 cards (1 for HomePNA, 0 for Ethernet, default Ethernet (array of int)
module_sig:    883f3504bb645aa285b5c47ed7a1e8e11213dc09e2fee057e474ae7754a0f36d5fe683478e403f9e0a08018a727bb9fccb38d536dddc1ca9df78384a8a

所以初始化pcnet32网卡需要用到pcnet32和mii模块。拷贝这两个模块:

mkdir -pv /mnt/sysroot/lib/modules
cp /lib/modules/2.6.18-194.el5/kernel/drivers/net/mii.ko /mnt/sysroot/lib/modules/
cp /lib/modules/2.6.18-194.el5/kernel/drivers/net/pcnet32.ko /mnt/sysroot/lib/modules/

在rc.sysinit脚本中安装网卡驱动模块:

vi /mnt/sysroot/etc/rc.d/rc.sysinit


加入下面几行:

echo "Initializing network device..."
/sbin/insmod /lib/modules/mii.ko
/sbin/insmod /lib/modules/pcnet32.ko
[ $? -eq 0 ] && success "Initializing newtork device" || failure "Initializing network device"

使用bincp.sh移植命令:insmod, lsmod


3. 配置网卡

网卡驱动安装后可以正常识别网卡,但是想要使用还需要对网卡进行配置,设置IP,网关等信息。


新建网卡配置文件:

mkdir -pv /mnt/sysroot/etc/sysconfig/network-scripts
vi /mnt/sysroot/etc/sysconfig/network-scripts/ifcfg-eth0

加入:
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.198.111
NETMASK=255.255.255.0
GATEWAY=192.168.198.2
ONBOOT=yes


创建网络服务脚本:

cp /etc/rc.d/init.d/network /mnt/sysroot/etc/rc.d/init.d/
vi /mnt/sysroot/etc/rc.d/init.d/network

保留其中前8行内容(文件头信息,为了能够被chkconfig管理),然后使用ifconfig和route命令对网卡进行设置。

#!/bin/bash
#
# chkconfig: 35 09 90
# description: network service
prog=network
. /etc/rc.d/init.d/functions
CONF=/etc/sysconfig/network-scripts/ifcfg-eth0
. $CONF
NETMASK=24
start(){
    ifconfig eth0 $IPADDR/$NETMASK
    [ -n $GATEWAY ] && route add default gw $GATEWAY
}
stop(){
    ifconfig eth0 down
}
status(){
    ifconfig eth0
}
usage(){
    echo "Usage: $prog {start|stop|status|restart}"
}
case $1 in
    start)
    start
    success "Config network eth0"
    ;;
    stop)
    stop
    success "Stop network card eth0"
    ;;
    restart)
    stop
    start
    success "Restart network card eth0"
    ;;
    status)
    status
    ;;
    *)
    usage
    exit 1
    ;;
esac

给网络服务脚本加上执行权限:

chmod +x /mnt/sysroot/etc/rc.d/init.d/network

rc.d目录的0,3,6运行级别中添加对应的软链接:

cd /mnt/sysroot/etc/rc.d/rc0.d
ln -sv ../init.d/network K90network
cd /mnt/sysroot/etc/rc.d/rc3.d
ln -sv ../init.d/network S10network
cd /mnt/sysroot/etc/rc.d/rc6.d
ln -sv ../init.d/network K90network


inittab文件中3运行级别时运行rc

vi /mnt/sysroot/etc/inittab


添加:

l3:3:wait:/etc/rc.d/rc 3

移植命令:ifconfig, route, ping


4. 激活回环网络设备


打开rc.sysinit

vi /mnt/sysroot/etc/rc.d/rc.sysinit

加入:

ifconfig lo 127.0.0.1/8
[ $? -eq 0 ] && success "Activating loopback network device" || failure "Activating loopback network device"

5. 测试

使用ping 命令测试与网关的连通性,没有问题的话说明前面的步骤没有问题。


6. 总结

加入网络功能后,我们的Mini Linux不再是一个孤立的单机,成为了一台可以与其他计算机互相通信的网络计算机,然后这台Mini Linux就可以实现ssh,web服务等功能。但是还有些小问题没有解决,例如测试结果展示的图片中,提示字符串是[root@(none) ~],其中主机名显示(none),就是因为还没有配置主机名的缘故。另外init是以只读方式挂载根文件系统,整个根文件系统都是不可修改的,解决这个问题需要在启动时重新挂载根为读写方式。这些小问题都将在下章节中解决。

【Linux】Linux系统中实现容器化的网络功能虚拟化平台 网络功能虚拟化(Network Function Virtualization,NFV)是一种通过软件化和虚拟化的方式来实现网络功能的概念。它将传统的网络设备和功能转变为可在通用服务器上运行的虚拟实例。NFV的目标是将网络功能从专用硬件中解耦出来,实现硬件和软件的分离,提高资源利用率、灵活性和可扩展性。 阅读详情

相关推荐

构建自己的Linux 之三 初步完善(提供网络功能等)

构建自己的Linux 之三 初步完善(提供网络功能) 1 添加profile文件 #Ash profile #vim:syntax=sh #No core files by default #ulimit -S -c 0>/dev/null 2>&1 #USER=

ce123的技术博客 3602

CentOS 新添加网卡,生成配置文件

一、物理网卡添加 步骤一:关机、添加网卡硬件: 1、网络适配器 2、添加 3、选中网络适配器 下一步 4、选择网络连接方式,这里看你自己需求 。然后点击 完成 步骤二:开机、添加新网卡配置文件 1、查看当前网卡信息。只有一块网卡ens33 ip addr 2、添加ifcfg-ens37这个配置文件,然后重启网络 cd /etc/sysconfig/network-scripts/ cp ifcfg-ens33 ifcfg-ens37 vim ifcfg-ens37 systemct

y_zilong的博客 1万+

Rocfall安装包&安装教程

Rocfall 第一步:下载安装包 下载路径: 链接:https://pan.baidu.com/s/1Dzvxzv67dSPRi7f7ZT9EeA 提取码:o9pl 第二部:安装 安装包解压 选择part1进行解压 点击Setup.exe启动安装 生成Serial Number 替换启动程序 安装完毕 素材来源于网络(禁止用于商业仅用于完成毕业设计和研究使用) 谢谢! ...

cym的博客 8704

linux 重新生成网卡配置文件

nmcli connection add con-name home type ethernet ifname eth1 autoconnect yes ip4 10.1.252.60/24 gw4 10.1.0.254   con add – 添加新的连接   con-name – 连接名   type – 设备类型   ifname – 接口名   autoconnect no - 禁止开...

weixin_30843605的博客 4137

DMTF相关协议(一):Redfish和SMBIOS

Redfish 是一种管理标准,使用超媒体 RESTful 接口中的数据模型表示。该模型以标准的、机器可读的模式表示,消息的有效负载以 JSON 表示。该协议本身利用了 OData v4。由于它是一个超媒体 API,因此能够通过一致的接口表示各种实现。它具有管理数据中心资源、处理事件、长时间任务和发现的机制。

weixin_44032634的博客 2265

使用 Mid360 从零开始搭建实物机器人入门级导航系统 —— 基于 Fast_Lio 和 Move_Base

本文详细介绍了如何使用Mid360机器人从零开始搭建一个基于Fast_Lio和Move_Base的入门级导航系统。通过配置 ROS2、集成激光雷达、IMU、Fast_Lio、Move_Base 等模块,我们成功构建了一个能够实现自动导航的机器人系统。在实际开发中,随着需求的变化,你可以不断调整参数、优化路径规划算法、增加新的传感器等,逐步提升机器人的智能与功能。

小蜗牛的珍贵百宝箱 3567

vmware 虚拟机中添加新网卡无配置文件

系统:centos 6/7 问题: 为虚拟机添加新网卡后,/etc/sysconfig/network-scripts/下无配置文件ifcfg-eth1 #ip addr //显示存在eth1 #ip addr eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP q...

weixin_30652271的博客 497

红外气体检测方案解析:从NDIR原理到物联网终端设计实践

气体检测是工业安全与环境监测的核心需求,其技术原理主要基于气体分子对特定物理或化学信号的响应。非色散红外(NDIR)技术作为一种物理检测方法,通过测量气体分子对特定波长红外光的吸收来定量浓度,因其不依赖化学反应,具备寿命长、抗干扰强和响应快等优势。在工程实践中,红外气体检测方案的价值在于为物联网终端设备提供了高可靠、低功耗的感知能力,广泛应用于工业过程监控、环境空气质量监测以及智能家居安全预警等场景。本文以一套集成了Microchip MCU、Axetris红外光源和Pyreos热释电传感器的参考设计为例,

weixin_30954817的博客 394

嵌入式 Linux 开发核心流程(含应用运行、联网、内核移植与编译,向内核添加新文件)

②利用交叉编译命令生成在开发板能运行的可执行文件:(这个的使用条件为直接打开开发板)

2201_75637288的博客 1118

Replay音频转换时samplerate缺失的解决方案指南

Replay音频转换时提示"No module named 'samplerate' This error is lazily reported, having originally occured in File"的解决方案

weixin_47445543的博客 2134

Anomalib库安装以及使用

Anomalib是一个专注于异常检测的深度学习库。它的目标是收集最新的异常检测算法,并提供用于在公共和私有数据集上进行基准测试的工具。该库提供了一系列已实现的异常检测算法,这些算法在最近的文献中有所描述。此外,Anomalib还提供了一套工具,方便开发人员开发和实现自定义模型。该库特别注重基于图像的异常检测,旨在识别数据集中的异常图像或图像中的异常像素区域。通过使用Anomalib,用户可以快速构建和评估各种异常检测算法,以满足其特定需求。

mingo_敏 5201

openwrt pandorabox kali Captive portal not popping up wifiphisher

kali hard blocked yes 0: phy0: Wireless LAN Soft blocked: no Hard blocked: yes root@kali:/home/kali# airodump-ng wlan0mon ioctl(SIOCSIFFLAGS) failed: Operation not possible due to RF-kill Failed initializing wireless card(s): wlan0mon 不要用

唐心的博客 1455

分布式训练中All-Reduce、All-Gather、Reduce-Scatter原理

Reduce-Scatter = 先对所有进程的数据做 Reduce(如 sum / mean),再把结果“切分”分发给各进程。(是 Reduce + Scatter 的融合操作。

comli_cn的博客 341

linux怎样自制库_定制属于自己的Linux操作系统

本文主要通过裁剪现有Linux系统,打造一个属于自己的Linux小系统,让其能够装载网卡驱动,并配置IP地址,实现网络功能。自制Linux系统步骤概述:1、新建一个硬盘2、在该新硬盘上新建两个分区,一个当boot分区,一个当/分区3、格式化并且挂载两个分区4、安装grub至目标磁盘5、为grub提供配置文件6、复制内核文件和initrd文件7、创建目标主机根文件系统8、移植bash命令和其库文件到...

weixin_39593061的博客 538

数字图像处理 基于matlab、opencv计算图像的梯度方向和梯度幅值

图像可以被视为标量场(即二维函数)。通过微分将标量场转换为矢量场。梯度是一个向量,描述了在x或y方向上移动时,图像变化的速度。我们使用导数来回答这样的问题,图像梯度的大小告诉图像变化的速度,而梯度的方向告诉图像变化最快的方向。因为梯度有方向和大小,所以将这些信息编码为向量是很自然的。该向量的长度提供了梯度的大小,而其方向提供了梯度方向。因为梯度在每个位置可能不同,所以我们在每个图像位置用不同的向量来表示它。

学以致用 知行合一 3203

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Linux破坏系统的代码,实战自制Linux操作系统(示例代码)

实战自制Linux操作系统自制linux系统步骤概述:1、新建一个硬盘2、在该新硬盘上新建两个分区,一个当boot分区,一个当/分区3、格式化并且挂载两个分区4、安装grub至目标磁盘5、为grub提供配置文件6、复制内核文件和initrd文件7、创建目标主机根文件系统8、移植bash命令和其库文件到根文件系统9、装载模块,实现网络功能10、启动测试具体操作步骤如下:1)为CentOS 6系统添加...

weixin_34632251的博客 353

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

微型linux系统测试网卡,自制一个小型Linux(附带网络功能)

我们这次讲述一下Linux启动的启动流程以及制作一个附带网络功能的mini linux一、叙述在制作一个小型的Linux之前,首先你得明白Linux系统的启动过程,我们用一张图来进行说明二、为什么要制作这么一个小型的系统?答案很简单,就是为了更好的了解Linux,当然这个没有必要了解的太深,或许你看到这个并不影响你使用并且操作一个Linux,这个也是一个兴趣。我们的操作系统的组成无非就是以硬件作为...

weixin_35803802的博客 263

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

手把手教你在windows虚拟机安装带网络的Linux系统

手把手教你在windows上虚拟机安装Linux系统,通过VMware和CentOS,达到在windows上运行Linux的效果,并且也可以按照windows虚拟机,达到游戏双开、工作游戏两不误的效果

杨大人的博客 3890

【Linux系统】萌新看过来!一篇文章带你走进Linux世界

Linux入门

小羊的博客 3461

什么是Linux系统

Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改完善Linux,使其最大化地适应用户的需要。Linux不仅系统性能稳定,而且是开源软件。

每日一记,每周一结。 5905

自制简易Linux系统

l 要求: 裁剪一个装载有网卡驱动可以上网并且使用到init的一个小系统l 准备;虚拟机,centos6.4 l 步骤;一、在宿主机上添加一块硬盘,并为其安装grub1. 在宿主机上添加一块硬盘,这里添加的是sde这块硬盘。2. 使用fdisk为sde分两个区,sde1 (100M) sde2(2G)3. 创建目录/mnt/boot /mnt/sys...

aegh86354的博客 206

linux 精简系统,Linux系统裁减之,制作一个极度精简的Linux-3-为精简的系统增加网络功能和关机重启功能...

第3章 为精简的Linux系统增加网络功能和开关重启功能在阅读这篇博文之前,建议先阅读我的上两篇博文,而且最好按顺序阅读:(不然可能会觉得我写得不知所云,呵呵!)第2篇:Linux系统裁减之,制作一个极度精简的Linux-2-用脚本实现自动拷贝命令和依赖库文件https://blog.51cto.com/linuxprince/20461423.1 为精简的miniLinux系统增加网络功能首先...

weixin_28813401的博客 341

自制Linux

步 骤: 1、在线添加一块20G的硬盘 2、分两个分区/boot100M /剩下的全部分给根 3、格式化为ext4文件系统 4、挂载/boot 和/ 5、生成/boot下文件 6、用脚本复制命令和命令所使用的库文件 7、复制网卡设备到/下 8、创建根下目录 9、复制完成,拔掉硬盘,放在一个新的虚拟机上用硬盘启动。 10、配置自制linux的网络功...

weixin_33877885的博客 118

手把手带你自制Linux系统之六 编译内核及busybox完成系统定制

手把手带你自制Linux系统之六 编译内核及busybox完成系统定制 重新看了一下前面的几章,发现其实前面的5章一直围绕一个话题讲解 — 如何利用CentOS现有资源组装一个Linux。这种方式十分拙劣,Linux内核是固化的、initrd没有充分精简、命令需要一个一个拷贝,最终做出来的Linux不能算是完全定制的。 这一章就来自己编译Linux源码生成内核,使用bu

云笔记,记录工作学习中遇到的问题,希望对你有帮助 8403

linux系统带界面,linux系统界面详情介绍

Linux作为一款免费的、开源的操作系统,linux系统界面也被广大开发者根据自身的喜好和审美设计的五花八门,有些Linux系统界面被开发者制作的相当精致,具有很强的观赏性和立体感,让人叹为观止,下面我们系统的介绍一下Linux系统界面。简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的 ...

weixin_39957186的博客 2790

实战自制Linux操作系统

实战自制Linux操作系统自制linux系统步骤概述:1、新建一个硬盘2、在该新硬盘上新建两个分区,一个当boot分区,一个当/分区3、格式化并且挂载两个分区4、安装grub至目标磁盘5、为grub提供配置文件6、复制内核文件和initrd文件7、创建目标主机根文件系统8、移植bash命令和其库文件到根文件系统9、装载模块,实现网络功能10、启动测试具体操...

weixin_33831196的博客 622
上一篇: Ubuntu14.04安装vncserver
下一篇: 手把手带你自制Linux系统之五 一些小细节的完善
Toormi
博客等级 码龄11年 563粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值