ent0 en0 et0 专题总结

本文详细介绍了AIX操作系统中网络接口的配置过程及注意事项,包括如何正确配置IP地址、解决网络不通的问题,以及如何通过命令行操作实现网络接口的管理和故障排查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:

http://blog.youkuaiyun.com/a2657222/article/details/8687621


ent1之类的是物理网卡的设备名,en0或是et0是网络接口名(逻辑上的),enx(x是一个数字,代表第几块网卡)是标准以太网接口,et0是IEEE 802.3以太网接口。


en0是Ethernet II protocal interface

et0是802.3 protocal interface

ent0是Hardware device interface
 

现从应用说起,我刚刚安装好AIX5.3的要去给它配一个IP地址,于是在
#smit tcpip
下面en0上配了个IP,ifconfig -a看到en0上有配置IP地址的信息发现网络不通,不是什么大问题,是上连的网线所在的VLAN配置与我所配的IP段不一致,于是再到en1上配置IP地址,并使用
#rmdev -l en0
将前面配置的IP地址的网卡删除掉,使用ifconfig -a看到只有en1上有配置IP地址的信息,测试网络正常

过了一段时间,重启该服务器后发现网络居然不通,这时使用ifconfig -a看到en0, en1上配有同样的IP

这时在smit tcpip里面无法更改en0的IP地址,于是使用以下命令
#rmdev -dl en0       //下完这个命令后在smit tcpip里面就没有en0的IP配置信息了
#cfgmgr
这样网络便恢复正常,再次重启Server网络不会有前面的问题

学到的东西
首先
#lsdev
就可以看到ent0, en0, et0
ent0是Hardware device interface
en0是Ethernet II protocal interface
et0是802.3 protocal interface

802.3与ethernet II帧格式几乎完全一样,但还是有几个数据位是不同,en0 Ethernet II是标准的

查看任意网卡的详细信息
#lscfg -vpl ent0
[root@KABDSPC01 /]# lscfg -vpl ent0
  ent0             U787A.001.DPM0W1W-P1-T5  2-Port 10/100/1000 Base-TX PCI-X Adapter (14108902)

      2-Port 10/100/1000 Base-TX PCI-X Adapter:
        Network Address.............00096BEB2368
        ROM Level.(alterable).......DV0210
        Device Specific.(YL)........U787A.001.DPM0W1W-P1-T5


  PLATFORM. SPECIFIC

  Name:  ethernet
    Node:  ethernet@1
    Device Type:  network
    Physical Location: U787A.001.DPM0W1W-P1-T5

Physical Location的位置可以判断网卡是否是插在PCI接口上的

一个有用的命令
#lsslot -c pci
[root@KABDSPC01 /]# lsslot -c pci
# Slot                   Description                         Device(s)
U787A.001.DPM0W1W-P1-C1  PCI-X capable, 64 bit, 133MHz slot  Empty     
U787A.001.DPM0W1W-P1-C2  PCI-X capable, 32 bit, 66MHz slot   Empty     
U787A.001.DPM0W1W-P1-C3  PCI-X capable, 32 bit, 66MHz slot   Empty     
U787A.001.DPM0W1W-P1-C4  PCI-X capable, 64 bit, 133MHz slot  Empty     
U787A.001.DPM0W1W-P1-C5  PCI-X capable, 64 bit, 133MHz slot  ent2
U787A.001.DPM0W1W-P1-C6  PCI-X capable, 64 bit, 133MHz slot  Empty     

总结,IP地址只能配在en0, en1这样的标准interface上,而实际的网线是插在ent0, ent1这样的物理网卡上,查看物理网卡的位置可以通过
#lscfg -vpl ent0/1/2

一旦给某个interface配置好了IP地址,如果想删除掉不用它需使用
#rmdev -dl en0

#cfgmgr


================================================

#lsattr -El ent0
bus_intr_lvl  10               Bus interrupt level                False
intr_priority 3                Interrupt priority                 False
dma_bus_mem   0xa90000         Address of bus memory used for DMA False
bus_io_addr   0x1c00           Bus I/O address                    False
dma_lvl       6                DMA arbitration level              False
tx_que_size   512              TRANSMIT queue size                True
rx_que_size   32               RECEIVE queue size                 True
use_alt_addr  no               Enable ALTERNATE ETHERNET address  True
alt_addr      0x               ALTERNATE ETHERNET address         True
media_speed   auto_negotiation Media Speed                        True
ip_gap        96               Inter-Packet Gap                   True

#lsattr -El en0
mtu           1500          Maximum IP Packet Size for This Device     True
remmtu        576           Maximum IP Packet Size for REMOTE Networks True
netaddr       11.181.102.2  Internet Address                           True
state         up            Current Interface Status                   True
arp           on            Address Resolution Protocol (ARP)          True
netmask       255.255.255.0 Subnet Mask                                True
security      none          Security Level                             True
authority                   Authorized Users                           True
broadcast                   Broadcast Address                          True
netaddr6                    N/A                                        True
alias6                      N/A                                        True
prefixlen                   N/A                                        True
alias4                      N/A                                        True
rfc1323                     N/A                                        True
tcp_nodelay                 N/A                                        True
tcp_sendspace               N/A                                        True
tcp_recvspace               N/A                                        True
tcp_mssdflt                 N/A                                        True

#lsattr -El et0
arp           on   Address Resolution Protocol (ARP)          True
mtu           1492 Maximum IP Packet Size for This Device     True
remmtu        576  Maximum IP Packet Size for REMOTE Networks True
netaddr            Internet Address                           True
state         down Current Interface Status                   True
rfc1323            N/A                                        True
netmask            Subnet Mask                                True
security      none Security Level                             True
authority          Authorized Users                           True
broadcast          Broadcast Address                          True
netaddr6           N/A                                        True
alias6             N/A                                        True
prefixlen          N/A                                        True
alias4             N/A                                        True
tcp_nodelay        N/A                                        True
tcp_sendspace      N/A                                        True
tcp_recvspace      N/A                                        True
tcp_mssdflt        N/A                                        True

 

=======================================

 

ent0  物理网卡接口

en0 和et0为OSI7层模型的数据链路层的封装格式

en0 :Ether channel /IEEE 802.3 adlink  此为思科的端口聚合功能,多网卡聚合一块 ,最多聚合4块 ,负载容错功能.


#include <reg52.h> #include <intrins.h> #include <math.h> #include <stdio.h> #include <string.h> #define uint unsigned int #define uchar unsigned char /* 硬件接口定义 */ sbit ADC_CS = P2^3; // ADC0804控制引脚 sbit ADC_RD = P2^4; sbit ADC_WR = P2^5; sbit ADC_INTR = P2^6; #define ADC_DATA P1 sbit DS18B20_DQ = P3^7; // DS18B20数据线 sbit TRIAC_CTRL = P2^7; // 可控硅控制引脚 sbit LCD_RS = P3^3; // LCD1602接口 sbit LCD_RW = P3^4; sbit LCD_EN = P3^5; #define LCD_DB P0 sbit BUZZER = P2^0; // 蜂鸣器 sbit KEY_UP = P3^0; // 按键 sbit KEY_DOWN = P3^1; sbit KEY_ENT = P3^2; /* 系统参数 */ #define SET_STEP 10.0 #define MAX_TEMP 1200.0 #define HYSTERESIS 3.0 #define SAFE_MARGIN 50.0 #define V_REF 5.0 #define ADC_MAX 255.0 #define GAIN 100.0 // AD620增益 #define K_TC_SLOPE 0.041 // K型热电偶灵敏度(41μV/℃) #define SAMPLE_TIME 200 // 200ms控制周期 /* PID参数 */ float Kp=2.5, Ki=0.02, Kd=0.8; float integral=0, last_err=0; /* 全局变量 */ idata char lcd_buf[16]; float current_temp=0.0, set_temp=600.0, ambient_temp=25.0; bit alarm_flag=0, set_mode=0; /* 温度查表数据 */ code float K_TC_Table[] = { 0.0, 0.0, // 0mV → 0℃ 4.095, 100.0, // 4.095mV → 10012.207, 300.0, 24.902, 600.0, 48.838, 1200.0 // 48.838mV → 1200℃ }; /* 函数声明 */ void sys_init(void); void lcd_init(void); void lcd_display(float now_temp, float set_temp); void keyscan(void); void pid_control(void); void alarm_check(void); void delay_ms(uint ms); void delay_us(uint us); uchar read_adc(void); float read_ds18b20(void); float adc_to_temp(uchar adc_val); float lookup_temperature(float voltage); void lcd_show_error(char *msg); bit ds18b20_reset(void); void ds18b20_write_byte(uchar dat); uchar ds18b20_read_byte(void); void write_cmd(uchar cmd); void write_data(uchar dat); void lcd_busy(void); /******************** 主函数 ********************/ void main() { sys_init(); lcd_init(); while(1) { ambient_temp = read_ds18b20(); // 读取冷端温度 current_temp = adc_to_temp(read_adc()); // 读取热电偶温度 keyscan(); // 按键处理 pid_control(); // PID温度控制 alarm_check(); // 安全检测 lcd_display(current_temp, set_temp); delay_ms(SAMPLE_TIME); // 系统周期 } } /******************** 系统初始化 ********************/ void sys_init() { // 外设初始化 ADC_CS = 1; ADC_RD = 1; ADC_WR = 1; TRIAC_CTRL = 0; BUZZER = 0; // 定时器0用于系统时钟 TMOD |= 0x01; // 模式1 TH0 = 0xFC; // 1ms定时 TL0 = 0x66; ET0 = 1; TR0 = 1; EA = 1; } /******************** 定时器0中断服务 ********************/ void timer0_isr() interrupt 1 { TH0 = 0xFC; // 重装初值 TL0 = 0x66; } /******************** PID控制算法 ********************/ void pid_control() { float err, output; err = set_temp - current_temp; // 积分抗饱和处理 if(fabs(err) < 100) { integral += err * SAMPLE_TIME / 1000.0; } // PID计算 output = Kp * err + Ki * integral + Kd * (err - last_err) * 1000.0 / SAMPLE_TIME; // 输出限幅和死区处理 if(output > 95.0) output = 95.0; else if(output < 5.0) output = 0.0; // PWM相位控制(周期20ms) if(output > 5.0) { TRIAC_CTRL = 1; delay_ms((uint)(output / 5.0)); TRIAC_CTRL = 0; delay_ms(20 - (uint)(output / 5.0)); } else { TRIAC_CTRL = 0; } last_err = err; } /******************** 温度计算与处理 ********************/ float adc_to_temp(uchar adc_val) { static uchar samples[16]; static uchar idx=0; uint sum=0; uchar i; float voltage, temp; // 滑动窗口滤波 samples[idx++%16] = adc_val; for(i=0; i<16; i++) sum += samples[i]; voltage = (sum >> 4) * V_REF / ADC_MAX / GAIN; // 冷端补偿 voltage += ambient_temp * K_TC_SLOPE / 1000.0; // 查表法温度转换 temp = lookup_temperature(voltage); // 传感器故障检测 if(adc_val < 5 || adc_val > 250) { lcd_show_error("SENSOR ERROR"); return -999.9; } return temp; } float lookup_temperature(float voltage) { uint i; voltage *= 1000; // 转换为mV for(i=2; i<sizeof(K_TC_Table)/sizeof(float); i+=2) { if(voltage <= K_TC_Table[i]) { float x1 = K_TC_Table[i-2]; float y1 = K_TC_Table[i-1]; float x2 = K_TC_Table[i]; float y2 = K_TC_Table[i+1]; return y1 + (voltage - x1) * (y2 - y1) / (x2 - x1); } } return MAX_TEMP; // 超量程 } /******************** DS18B20完整驱动程序 ********************/ float read_ds18b20(void) { uchar temp_l, temp_h; int temp; float t; if(!ds18b20_reset()) { // 复位失败处理 lcd_show_error("DS18B20 ERROR"); return -999.9; } ds18b20_write_byte(0xCC); // 跳过ROM命令 ds18b20_write_byte(0x44); // 启动温度转换 delay_ms(750); // 等待转换完成(12位精度) if(!ds18b20_reset()) { // 再次复位 return -999.9; } ds18b20_write_byte(0xCC); // 跳过ROM ds18b20_write_byte(0xBE); // 读取暂存器 temp_l = ds18b20_read_byte(); // 读取温度低字节 temp_h = ds18b20_read_byte(); // 读取温度高字节 temp = (temp_h << 8) | temp_l; t = temp * 0.0625; // 转换为实际温度 return t; } bit ds18b20_reset() { DS18B20_DQ = 0; delay_us(480); DS18B20_DQ = 1; delay_us(60); return (DS18B20_DQ == 0); } void ds18b20_write_byte(uchar dat) { uchar i; for(i=0; i<8; i++) { DS18B20_DQ = 0; delay_us(2); DS18B20_DQ = dat & 0x01; delay_us(60); DS18B20_DQ = 1; dat >>= 1; } } uchar ds18b20_read_byte() { uchar i, dat=0; for(i=0; i<8; i++) { DS18B20_DQ = 0; delay_us(2); DS18B20_DQ = 1; delay_us(8); dat >>= 1; // 修正位移方向 if(DS18B20_DQ) dat |= 0x80; delay_us(50); } return dat; } /******************** ADC0804驱动程序 ********************/ uchar read_adc() { uchar val; ADC_CS = 0; ADC_WR = 0; _nop_(); _nop_(); ADC_WR = 1; while(ADC_INTR == 1); // 等待转换完成 ADC_RD = 0; val = ADC_DATA; ADC_RD = 1; ADC_CS = 1; return val; } /******************** LCD1602驱动程序 ********************/ void lcd_init() { delay_ms(15); write_cmd(0x38); write_cmd(0x0C); write_cmd(0x06); write_cmd(0x01); } void lcd_display(float now_temp, float set_temp) { uchar i; if(now_temp < 0) { sprintf(lcd_buf, "NOW:----.-%cC ", 0xDF); } else { sprintf(lcd_buf, "NOW:%5.1f%cC", now_temp, 0xDF); } write_cmd(0x80); for(i=0; lcd_buf[i]; i++) write_data(lcd_buf[i]); sprintf(lcd_buf, "SET:%5.1f%cC", set_temp, 0xDF); write_cmd(0xC0); for(i=0; lcd_buf[i]; i++) write_data(lcd_buf[i]); } void lcd_show_error(char *msg) { uchar i; write_cmd(0x01); write_cmd(0x80); for(i=0; msg[i]; i++) write_data(msg[i]); } void write_cmd(uchar cmd) { lcd_busy(); LCD_RS = 0; LCD_RW = 0; LCD_DB = cmd; LCD_EN = 1; _nop_(); LCD_EN = 0; delay_ms(2); } void write_data(uchar dat) { lcd_busy(); LCD_RS = 1; LCD_RW = 0; LCD_DB = dat; LCD_EN = 1; _nop_(); LCD_EN = 0; delay_ms(1); } void lcd_busy() { LCD_DB = 0xFF; LCD_RS = 0; LCD_RW = 1; do { LCD_EN = 1; _nop_(); LCD_EN = 0; } while (LCD_DB & 0x80); } /******************** 按键扫描程序 ********************/ void keyscan() { static bit key_lock = 0; if(!KEY_ENT && !key_lock) { delay_ms(20); if(!KEY_ENT) { set_mode = ~set_mode; key_lock = 1; BUZZER = 1; delay_ms(50); BUZZER = 0; } } else if(KEY_ENT) { key_lock = 0; } if(set_mode) { if(!KEY_UP) { delay_ms(20); if(!KEY_UP) { set_temp += SET_STEP; if(set_temp > MAX_TEMP) set_temp = MAX_TEMP; while(!KEY_UP); } } if(!KEY_DOWN) { delay_ms(20); if(!KEY_DOWN) { set_temp -= SET_STEP; if(set_temp < 0) set_temp = 0; while(!KEY_DOWN); } } } } /******************** 报警与安全系统 ********************/ void alarm_check() { static uchar alarm_cnt = 0; if(current_temp < 0 || current_temp > MAX_TEMP) { BUZZER = 1; TRIAC_CTRL = 0; alarm_flag = 1; } else if(fabs(current_temp - set_temp) > SAFE_MARGIN) { if(++alarm_cnt > 10) { BUZZER = ~BUZZER; alarm_cnt = 0; } alarm_flag = 1; } else { BUZZER = 0; alarm_flag = 0; alarm_cnt = 0; } } /******************** 延时函数 ********************/ void delay_ms(uint ms) { uint i, j; for(i=0; i<ms; i++) for(j=0; j<114; j++); } void delay_us(uint us) { while(us--) { _nop_(); _nop_(); _nop_(); _nop_(); } }这个代码LCD显示屏不显示是什么原因
05-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值