现在的世界,都是网络的世界了。没有网络是不可想像的,失去太多激动人心的时刻。没有网络,就不可能方便地交流数据,BLOG也不可发达到目前这种程度。就是在PMON的调试里,使用网络也是非常方便的。比如想开发PMON运行的程序,就可以使用网络加载,比如TFTP加载程序。这样就不用每次去写硬盘,或者写到其它地方去,只要把网络连接好,就可以在其它机器里编译,然后通过网络把程序放到目标机器里运行了,这样做会大大地加快调试程序的进度。现在就来分析PMON里的网络功能部分。
在函数dbginit里调用下面的函数进行初始化的动作:
#ifdef INET
SBD_DISPLAY ("NETI", CHKPNT_NETI);
init_net (1);
#endif
上面通过调用函数init_net进行网络初始化。
在目录kkmao/sys/kern/init_main.c里,就可以看到这个函数的真面目,如下:
void
init_net (int hwok)
{
char *e;
int i, s;
struct pdevinit *pdev;
vm_offset_t maxaddr;
extern struct pdevinit pdevinit[];
extern vm_map_t mb_map, kernel_map;
sysloglevel = LOG_NOTICE;
if ((e = getenv ("loglevel")) != 0) {
char *ee;
u_long n = strtoul (e, &ee, 0);
if (*ee == '/0' && n <= LOG_DEBUG) {
sysloglevel = n;
}
else {
CODE *code;
for (code = prioritynames; code->c_name; code++) {
if (strcmp (code->c_name, ee) == 0) {
break;
}
}
if (code->c_name) {
sysloglevel = code->c_val;
}
else {
log (LOG_ERR, "bad $loglevel variable/n");
}
}
}
上面这段代码进行调试LOG输出的设置,比如根据不同的调试参数,就可以输出LOG的级别,比如设置所有LOG都输出。有时为了调试方便,又想设置只有高级出错的LOG才输出,否则就会被一大堆LOG困惑,埋没在LOG的汪洋里,找不到一点头绪。
/*
* Init system global parameters
*/
paraminit ();
上面设置了一些全局参数,比如时间片的大小,进程的个数等等。
/*
* Initialise "virtual memory" maps
*/
vminit();
上面进行设置内存分配的开始地址。
/*
* Initialise memory allocator
*/
kmeminit();
上面设置内核内存的分配链表结构,设置内存分配的起始地址和大小。其实就是指向上一个函数里分配的内存位置。
/*
* Initialize callouts
*/
callout = malloc(sizeof(struct callout) * ncallout, M_TEMP, M_NOWAIT);
callfree = callout;
for (i = 1; i < ncallout; i++) {
callout[i-1].c_next = &callout[i];
}
上面创建调用队列。
if (hwok) {
startrtclock(hz);
}
上面保存时钟计数和时间。
/*
* Initialise mbufs
*/
mclrefcnt = (char *)malloc(VM_KMEM_SIZE/MCLBYTES, M_MBUF, M_NOWAIT);
bzero(mclrefcnt, NMBCLUSTERS+CLBYTES/MCLBYTES);
mb_map = kmem_suballoc(kernel_map, (vm_offset_t *)&mbutl, &maxaddr,
NMBCLUSTERS*MCLBYTES, FALSE);
mbinit();
上面初始化网络使用的MBUF缓冲区。
/*
* Initialise network devices and protocols
*/
if (hwok) {
s = splhigh();
tgt_devconfig();
for (pdev = pdevinit; pdev->pdev_attach != NULL; pdev++) {
if (pdev->pdev_count > 0) {
(*pdev->pdev_attach)(pdev->pdev_count);
}
}
ifinit();
printf("ifinit done./n");
domaininit();
printf("domaininit done./n");
splx(s);
}
上面初始化网络的设备和协议,当然还有很多初始化在里面的。后面再慢慢地分析它。
/*
* Initialise process table, we become first "process"
*/
printf("init_proc..../n");
init_proc ();
上面初始化所有进程表,并把这里运行的进程为第一个进程。
/* enable realtime clock interrupts */
if (hwok) {
enablertclock();
}
boottime = time;
spl0();
/*delay(1000000);*/
delay(10000);
上面设置可以软件时钟中断。
#ifdef INET
if (getenv("ifconfig") != 0) {
/* configure the default ethernet interface */
char *ip = getenv("ifconfig");
char *p, *cp;
char ifn[100];
while (*ip) {
/*
* Check for <ifc>:<config>;
*/
cp = ifn;
p = NULL;
while (*ip != ';' && *ip != '/0') {
if (*ip == ':' && p == NULL) {
*cp = '/0';
p = ++cp;
} else {
*cp++ = *ip;
}
ip++;
}
if (*ip == ';')
ip++;
*cp = '/0';
s = splhigh();
printf("network configure '%s:%s'/n", ifn, p);
splx(s);
ifconfig (ifn, p);
}
}
#endif /* INET */
上面从FLASH里读取IP地址,并设置给网络卡。
}
通过这个函数,就可以把网络初始化好,这样就可以接收网络数据和发送网络数据。同时在开始那里先进行内存管理的设置,以便后面可以分配内存。当然,这里还有一个初始化函数没有深入去解读,下一次再去探索它的作用。
分享到:
相关推荐
龙芯软件开发------蔡军生.pdf
UOS服务器版MIPS架构龙芯openjdk-8-jdk离线安装包及依赖
龙芯Pmon-gcc-64位编译
此包架构是:龙芯--loongarch JDK版本:jdk-v8.0 特意买了几台国产机器安装和测试,有多种CPU电脑测试(1.飞腾-鲲鹏--arm64,2.龙芯--loongarch,3.龙芯--mips,4.兆芯-海光-intel-AMD--X86) 因为我们公司也是做...
龙芯系列处理器是中国科学院计算所研制的具有自主知 识产权的通用处理器,它具有低功耗、低成本的特点。龙芯 2E 处理器[3] 是一款实现 64 bit MIPS III 指令集的通用 RISC 处理器。 龙芯 2E 的指令流水线每个时钟...
此包架构是:龙芯--mips 该包版本:jdk-openjdk-1.8 特意买了几台国产机器安装和测试,有多种CPU电脑测试(1.飞腾-鲲鹏--arm64,2.龙芯--loongarch,3.龙芯--mips,4.兆芯-海光-intel-AMD--X86) 因为我们公司也是...
此包架构是:龙芯--mips 该包版本:nginx-v1.18 特意买了几台国产机器安装和测试,有多种CPU电脑测试(1.飞腾-鲲鹏--arm64,2.龙芯--loongarch,3.龙芯--mips,4.兆芯-海光-intel-AMD--X86) 因为我们公司也是做...
此包架构是:龙芯--mips 该包版本:mariadb-v10.3 特意买了几台国产机器安装和测试,有多种CPU电脑测试(1.飞腾-鲲鹏--arm64,2.龙芯--loongarch,3.龙芯--mips,4.兆芯-海光-intel-AMD--X86) 因为我们公司也是做...
龙芯中科--龙芯信息化平台的应用迁移工作思考,转自微信号“龙芯中科”
龙芯--loongarch,3.龙芯--mips,4.兆芯-海光-intel-AMD--X86) 因为我们公司也是做国产软件的,这些必须测试成功,到客户那里直接安装和使用 安装命令: sudo dpkg -i 你的路径/*.deb 安装完可以直接使用 查看是否...
此包架构是:龙芯--loongarch JDK版本:jdk-v8.0 特意买了几台国产机器安装和测试,有多种CPU电脑测试(1.飞腾-鲲鹏--arm64,2.龙芯--loongarch,3.龙芯--mips,4.兆芯-海光-intel-AMD--X86) 因为我们公司也是做...
此包架构是:龙芯--loongarch 数据库版本:mariadb-v10.3 特意买了几台国产机器安装和测试,有多种CPU电脑测试(1.飞腾-鲲鹏--arm64,2.龙芯--loongarch,3.龙芯--mips,4.兆芯-海光-intel-AMD--X86) 因为我们公司...
全面介绍龙芯平台的软件开发。剖析各个硬件子模块的初始化过程。致力于国产CPU龙芯平台开发的童鞋不要错过了。
基于SimpleScalar的龙芯CPU模拟器Sim-Godson.pdf
使用方式见龙芯杯比赛文档,或者链接:https://oscourse-tsinghua.gitbook.io/loongsoncsprj2020-manual/ucore/long-xin-bian-yi-huan-jing-pei-zhi
此包架构是:龙芯-loongarch 数据库版本:mariadb-v10.3 特意买了几台国产机器安装和测试,有多种CPU电脑测试(1.飞腾-鲲鹏--arm64,2.龙芯--loongarch,3.龙芯--mips,4.兆芯-海光-intel-AMD--X86) 因为我们公司...
龙芯--loongarch,3.龙芯--mips,4.兆芯-海光-intel-AMD--X86) 因为我们公司也是做国产软件的,这些必须测试成功,到客户那里直接安装和使用 安装命令: sudo dpkg -i 你的路径/*.deb 安装完可以直接使用 查看是否...
龙芯ls1b-pwm-Led
龙芯Loongson2K1000_data数据手册,硬件设计必备材料,软件开发参考.
中海大-计算机组成原理 single_cycle_cpu 单周期CPU pipeline_cpu 五级流水线CPU pipeline_CU_cpu 控制逻辑集成为CU模块 6pipeline_CU_cpu 将五级流水线扩展为6级流水线 vivado 2018.3 FPGA开发板