国产强伦姧在线观看无码,中文字幕99久久亚洲精品,国产精品乱码在线观看,色桃花亚洲天堂视频久久,日韩精品无码观看视频免费

      您現(xiàn)在的位置:智能制造網(wǎng)>技術(shù)中心>Linux啟動過程綜述

      直播推薦

      更多>

      企業(yè)動態(tài)

      更多>

      推薦展會

      更多>

      Linux啟動過程綜述

      2009年03月09日 19:59:04人氣:847來源:浙江啟揚智能科技有限公司

      內(nèi)容:
      一. Bootloader
      二.Kernel引導入口
      三.核心數(shù)據(jù)結(jié)構(gòu)初始化--內(nèi)核引導*部分
      四.外設(shè)初始化--內(nèi)核引導第二部分
      五.init進程和inittab引導指令
      六.rc啟動腳本
      七.getty和login
      八.bash
      附:XDM方式登錄


      本文以Redhat 6.0 Linux 2.2.19 for Alpha/AXP為平臺,描述了從開機到登錄的 Linux 啟動全過程。該文對i386平臺同樣適用。
      一. Bootloader
      在Alpha/AXP 平臺上引導Linux通常有兩種方法,一種是由MILO及其他類似的引導程序引導,另一種是由Firmware直接引導。MILO功能與i386平臺的LILO相近,但內(nèi)置有基本的磁盤驅(qū)動程序(如IDE、SCSI等),以及常見的文件系統(tǒng)驅(qū)動程序(如ext2,iso9660等), firmware有ARC、SRM兩種形式,ARC具有類BIOS界面,甚至還有多重引導的設(shè)置;而SRM則具有功能強大的命令行界面,用戶可以在控制臺上使用boot等命令引導系統(tǒng)。ARC有分區(qū)(Partition)的概念,因此可以訪問到分區(qū)的首扇區(qū);而SRM只能將控制轉(zhuǎn)給磁盤的首扇區(qū)。兩種firmware都可以通過引導MILO來引導Linux,也可以直接引導Linux的引導代碼。

      “arch/alpha/boot” 下就是制作Linux Bootloader的文件。“head.S”文件提供了對 OSF PAL/1的調(diào)用入口,它將被編譯后置于引導扇區(qū)(ARC的分區(qū)首扇區(qū)或SRM的磁盤0扇區(qū)),得到控制后初始化一些數(shù)據(jù)結(jié)構(gòu),再將控制轉(zhuǎn)給“main.c”中的start_kernel(), start_kernel()向控制臺輸出一些提示,調(diào)用pal_init()初始化PAL代碼,調(diào)用openboot() 打開引導設(shè)備(通過讀取Firmware環(huán)境),調(diào)用load()將核心代碼加載到START_ADDR(見 “include/asm-alpha/system.h”),再將Firmware中的核心引導參數(shù)加載到ZERO_PAGE(0) 中,zui后調(diào)用runkernel()將控制轉(zhuǎn)給0x100000的kernel,bootloader部分結(jié)束。

      “arch/alpha/boot/bootp.c”以“main.c”為基礎(chǔ),可代替“main.c”與“head.S” 生成用于BOOTP協(xié)議網(wǎng)絡(luò)引導的Bootloader。
      Bootloader中使用的所有“srm_”函數(shù)在“arch/alpha/lib/”中定義。

      以上這種Boot方式是一種zui簡單的方式,即不需其他工具就能引導Kernel,前提是按照 Makefile的指導,生成bootimage文件,內(nèi)含以上提到的bootloader以及vmlinux,然后將 bootimage寫入自磁盤引導扇區(qū)始的位置中。

      當采用MILO這樣的引導程序來引導Linux時,不需要上面所說的Bootloader,而只需要 vmlinux或vmlinux.gz,引導程序會主動解壓加載內(nèi)核到0x1000(小內(nèi)核)或0x100000(大內(nèi)核),并直接進入內(nèi)核引導部分,即本文的第二節(jié)。

      對于I386平臺
      i386系統(tǒng)中一般都有BIOS做zui初的引導工作,那就是將四個主分區(qū)表中的*個可引導 分區(qū)的*個扇區(qū)加載到實模式地址0x7c00上,然后將控制轉(zhuǎn)交給它。

      在“arch/i386/boot” 目錄下,bootsect.S是生成引導扇區(qū)的匯編源碼,它首先將自己拷貝到0x90000上,然后將緊接其后的setup部分(第二扇區(qū))拷貝到0x90200,將真正的內(nèi)核代碼拷貝到0x100000。以上這些拷貝動作都是以bootsect.S、setup.S以及vmlinux在磁盤上連續(xù)存放為前提的,也就是說,我們的bzImage文件或者zImage文件是按照bootsect,setup, vmlinux這樣的順序組織,并存放于始于引導分區(qū)的首扇區(qū)的連續(xù)磁盤扇區(qū)之中。

      bootsect.S完成加載動作后,就直接跳轉(zhuǎn)到0x90200,這里正是setup.S的程序入口。 setup.S的主要功能就是將系統(tǒng)參數(shù)(包括內(nèi)存、磁盤等,由BIOS返回)拷貝到 0x90000-0x901FF內(nèi)存中,這個地方正是bootsect.S存放的地方,這時它將被系統(tǒng)參數(shù)覆蓋。以后這些參數(shù)將由保護模式下的代碼來讀取。

      除此之外,setup.S還將video.S中的代碼包含進來,檢測和設(shè)置顯示器和顯示模式。zui 后,setup.S將系統(tǒng)轉(zhuǎn)換到保護模式,并跳轉(zhuǎn)到0x100000(對于bzImage格式的大內(nèi)核是 0x100000,對于zImage格式的是0x1000)的內(nèi)核引導代碼,Bootloader過程結(jié)束。

      對于2.4.x版內(nèi)核
      沒有什么變化。

      二.Kernel引導入口


      在arch/alpha/vmlinux.lds 的鏈接腳本控制下,鏈接程序?qū)mlinux的入口置于 "arch/alpha/kernel/head.S"中的__start上,因此當Bootloader跳轉(zhuǎn)到0x100000時, __start處的代碼開始執(zhí)行。__start的代碼很簡單,只需要設(shè)置一下全局變量,然后就跳轉(zhuǎn)到start_kernel去了。start_kernel()是"init/main.c"中的asmlinkage函數(shù),至此,啟動過程轉(zhuǎn)入體系結(jié)構(gòu)無關(guān)的通用C代碼中。

      對于I386平臺
      在i386體系結(jié)構(gòu)中,因為i386本身的問題,在 "arch/alpha/kernel/head.S"中需要更多的設(shè)置,但zui終也是通過call SYMBOL_NAME(start_kernel)轉(zhuǎn)到start_kernel()這個體系結(jié)構(gòu)無關(guān)的函數(shù)中去執(zhí)行了。

      所不同的是,在i386系統(tǒng)中,當內(nèi)核以bzImage的形式壓縮,即大內(nèi)核方式(__BIG_KERNEL__)壓縮時就需要預先處理bootsect.S和setup.S,按照大核模式使用$(CPP) 處理生成bbootsect.S和bsetup.S,然后再編譯生成相應的.o文件,并使用 "arch/i386/boot/compressed/build.c"生成的build工具,將實際的內(nèi)核(未壓縮的,含 kernel中的head.S代碼)與"arch/i386/boot/compressed"下的head.S和misc.c合成到一起,其中的 head.S代替了"arch/i386/kernel/head.S"的位置,由Bootloader引導執(zhí)行(startup_32入口),然后它調(diào)用misc.c中定義的decompress_kernel()函數(shù),使用 "lib/inflate.c"中定義的gunzip()將內(nèi)核解壓到0x100000,再轉(zhuǎn)到其上執(zhí)行 "arch/i386/kernel/head.S"中的startup_32代碼。

      對于2.4.x版內(nèi)核
      沒有變化。

      三.核心數(shù)據(jù)結(jié)構(gòu)初始化--內(nèi)核引導*部分
      start_kernel()中調(diào)用了一系列初始化函數(shù),以完成kernel本身的設(shè)置。 這些動作有的是公共的,有的則是需要配置的才會執(zhí)行的。


      在start_kernel()函數(shù)中,
      輸出Linux版本信息(printk(linux_banner))
      設(shè)置與體系結(jié)構(gòu)相關(guān)的環(huán)境(setup_arch())
      頁表結(jié)構(gòu)初始化(paging_init())
      使用"arch/alpha/kernel/entry.S"中的入口點設(shè)置系統(tǒng)自陷入口(trap_init())
      使用alpha_mv結(jié)構(gòu)和entry.S入口初始化系統(tǒng)IRQ(init_IRQ())
      核心進程調(diào)度器初始化(包括初始化幾個缺省的Bottom-half,sched_init())
      時間、定時器初始化(包括讀取CMOS時鐘、估測主頻、初始化定時器中斷等,time_init())
      提取并分析核心啟動參數(shù)(從環(huán)境變量中讀取參數(shù),設(shè)置相應標志位等待處理,(parse_options())
      控制臺初始化(為輸出信息而先于PCI初始化,console_init())
      剖析器數(shù)據(jù)結(jié)構(gòu)初始化(prof_buffer和prof_len變量)
      核心Cache初始化(描述Cache信息的Cache,kmem_cache_init())
      延遲校準(獲得時鐘jiffies與CPU主頻ticks的延遲,calibrate_delay())
      內(nèi)存初始化(設(shè)置內(nèi)存上下界和頁表項初始值,mem_init())
      創(chuàng)建和設(shè)置內(nèi)部及通用cache("slab_cache",kmem_cache_sizes_init())
      創(chuàng)建uid taskcount SLAB cache("uid_cache",uidcache_init())
      創(chuàng)建文件cache("files_cache",filescache_init())
      創(chuàng)建目錄cache("dentry_cache",dcache_init())
      創(chuàng)建與虛存相關(guān)的cache("vm_area_struct","mm_struct",vma_init())
      塊設(shè)備讀寫緩沖區(qū)初始化(同時創(chuàng)建"buffer_head"cache用戶加速訪問,buffer_init())
      創(chuàng)建頁cache(內(nèi)存頁hash表初始化,page_cache_init())
      創(chuàng)建信號隊列cache("signal_queue",signals_init())
      初始化內(nèi)存inode表(inode_init())
      創(chuàng)建內(nèi)存文件描述符表("filp_cache",file_table_init())
      檢查體系結(jié)構(gòu)漏洞(對于alpha,此函數(shù)為空,check_bugs())
      SMP機器其余CPU(除當前引導CPU)初始化(對于沒有配置SMP的內(nèi)核,此函數(shù)為空,smp_init())
      啟動init過程(創(chuàng)建*個核心線程,調(diào)用init()函數(shù),原執(zhí)行序列調(diào)用cpu_idle() 等待調(diào)度,init())
      至此start_kernel()結(jié)束,基本的核心環(huán)境已經(jīng)建立起來了。

      對于I386平臺
      i386平臺上的內(nèi)核啟動過程與此基本相同,所不同的主要是實現(xiàn)方式。

      對于2.4.x版內(nèi)核
      2.4.x中變化比較大,但基本過程沒變,變動的是各個數(shù)據(jù)結(jié)構(gòu)的具體實現(xiàn),比如Cache。

      四.外設(shè)初始化--內(nèi)核引導第二部分
      init()函數(shù)作為核心線程,首先鎖定內(nèi)核(僅對SMP機器有效),然后調(diào)用 do_basic_setup()完成外設(shè)及其驅(qū)動程序的加載和初始化。過程如下:


      總線初始化(比如pci_init())
      網(wǎng)絡(luò)初始化(初始化網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu),包括sk_init()、skb_init()和proto_init()三部分,在proto_init()中,將調(diào)用protocols結(jié)構(gòu)中包含的所有協(xié)議的初始化過程,sock_init())
      創(chuàng)建bdflush核心線程(bdflush()過程常駐核心空間,由核心喚醒來清理被寫過的內(nèi)存緩沖區(qū),當bdflush()由kernel_thread()啟動后,它將自己命名為kflushd)
      創(chuàng)建kupdate核心線程(kupdate()過程常駐核心空間,由核心按時調(diào)度執(zhí)行,將內(nèi)存緩沖區(qū)中的信息更新到磁盤中,更新的內(nèi)容包括超級塊和inode表)
      設(shè)置并啟動核心調(diào)頁線程kswapd(為了防止kswapd啟動時將版本信息輸出到其他信息中間,核心線調(diào)用kswapd_setup()設(shè)置kswapd運行所要求的環(huán)境,然后再創(chuàng)建 kswapd核心線程)
      創(chuàng)建事件管理核心線程(start_context_thread()函數(shù)啟動context_thread()過程,并重命名為keventd)
      設(shè)備初始化(包括并口parport_init()、字符設(shè)備chr_dev_init()、塊設(shè)備 blk_dev_init()、SCSI設(shè)備scsi_dev_init()、網(wǎng)絡(luò)設(shè)備net_dev_init()、磁盤初始化及分區(qū)檢查等等, device_setup())
      執(zhí)行文件格式設(shè)置(binfmt_setup())
      啟動任何使用__initcall標識的函數(shù)(方便核心添加啟動函數(shù),do_initcalls())
      文件系統(tǒng)初始化(filesystem_setup())
      安裝root文件系統(tǒng)(mount_root())
      至此do_basic_setup()函數(shù)返回init(),在釋放啟動內(nèi)存段(free_initmem())并給內(nèi)核解鎖以后,init()打開 /dev/console設(shè)備,重定向stdin、stdout和stderr到控制臺,zui后,搜索文件系統(tǒng)中的init程序(或者由init=命令行參數(shù)的程序),并使用 execve()系統(tǒng)調(diào)用加載執(zhí)行init程序。

      init()函數(shù)到此結(jié)束,內(nèi)核的引導部分也到此結(jié)束了,這個由start_kernel()創(chuàng)建的*個線程已經(jīng)成為一個用戶模式下的進程了。此時系統(tǒng)中存在著六個運行實體:

      start_kernel()本身所在的執(zhí)行體,這其實是一個"手工"創(chuàng)建的線程,它在創(chuàng)建了init()線程以后就進入cpu_idle()循環(huán)了,它不會在進程(線程)列表中出現(xiàn)
      init線程,由start_kernel()創(chuàng)建,當前處于用戶態(tài),加載了init程序
      kflushd核心線程,由init線程創(chuàng)建,在核心態(tài)運行bdflush()函數(shù)
      kupdate核心線程,由init線程創(chuàng)建,在核心態(tài)運行kupdate()函數(shù)
      kswapd核心線程,由init線程創(chuàng)建,在核心態(tài)運行kswapd()函數(shù)
      keventd核心線程,由init線程創(chuàng)建,在核心態(tài)運行context_thread()函數(shù)

      對于I386平臺
      基本相同。

      對于2.4.x版內(nèi)核
      這一部分的啟動過程在2.4.x內(nèi)核中簡化了不少,缺省的獨立初始化過程只剩下網(wǎng)絡(luò) (sock_init())和創(chuàng)建事件管理核心線程,而其他所需要的初始化都使用__initcall()宏 包含在do_initcalls()函數(shù)中啟動執(zhí)行。

      五.init進程和inittab引導指令
      init進程是系統(tǒng)所有進程的起點,內(nèi)核在完成核內(nèi)引導以后,即在本線程(進程)空 間內(nèi)加載init程序,它的進程號是1。

      init程序需要讀取/etc/inittab文件作為其行為指針,inittab是以行為單位的描述性(非執(zhí)行性)文本,每一個指令行都具有以下格式:

      id:runlevel:action:process其中id為入口標識符,runlevel為運行級別,action為動作代號,process為具體的執(zhí)行程序。

      id一般要求4個字符以內(nèi),對于getty或其他login程序項,要求id與tty的編號相同,否則getty程序?qū)⒉荒苷9ぷ鳌?/p>

      runlevel 是init所處于的運行級別的標識,一般使用0-6以及S或s。0、1、6運行級別被系統(tǒng)保留,0作為shutdown動作,1作為重啟至單用戶模式,6 為重啟;S和s意義相同,表示單用戶模式,且無需inittab文件,因此也不在inittab中出現(xiàn),實際上,進入單用戶模式時,init直接在控制臺(/dev/console)上運行/sbin/sulogin。

      在一般的系統(tǒng)實現(xiàn)中,都使用了2、3、4、5幾個級別,在 Redhat系統(tǒng)中,2表示無NFS支持的多用戶模式,3表示*多用戶模式(也是zui常用的級別),4保留給用戶自定義,5表示XDM圖形登錄方式。7- 9級別也是可以使用的,傳統(tǒng)的Unix系統(tǒng)沒有定義這幾個級別。runlevel可以是并列的多個值,以匹配多個運行級別,對大多數(shù)action來說,僅當runlevel與當前運行級別匹配成功才會執(zhí)行。

      initdefault是一個特殊的action值,用于標識缺省的啟動級別;當init由核心激活 以后,它將讀取inittab中的initdefault項,取得其中的runlevel,并作為當前的運行級別。如果沒有inittab文件,或者其中沒有initdefault項,init將在控制臺上請求輸入 runlevel。

      sysinit、 boot、bootwait等action將在系統(tǒng)啟動時無條件運行,而忽略其中的runlevel,其余的action(不含initdefault)都與某個runlevel相關(guān)。各個action的定義在inittab的man手冊中有詳細的描述。

      在Redhat系統(tǒng)中,一般情況下inittab都會有如下幾項:
      id:3:initdefault:
      #表示當前缺省運行級別為3--*多任務(wù)模式;
      si::sysinit:/etc/rc.d/rc.sysinit
      #啟動時自動執(zhí)行/etc/rc.d/rc.sysinit腳本
      l3:3:wait:/etc/rc.d/rc 3
      #當運行級別為3時,以3為參數(shù)運行/etc/rc.d/rc腳本,init將等待其返回
      0:12345:respawn:/sbin/mingetty tty0
      #在1-5各個級別上以tty0為參數(shù)執(zhí)行/sbin/mingetty程序,打開tty0終端用于
      #用戶登錄,如果進程退出則再次運行mingetty程序
      x:5:respawn:/usr/bin/X11/xdm -nodaemon
      #在5級別上運行xdm程序,提供xdm圖形方式登錄界面,并在退出時重新執(zhí)行.

      六.rc啟動腳本

      上一節(jié)已經(jīng)提到init進程將啟動運行rc腳本,這一節(jié)將介紹rc腳本具體的工作。

      一般情況下,rc啟動腳本都位于/etc/rc.d目錄下,rc.sysinit中zui常見的動作就是激活交換分區(qū),檢查磁盤,加載硬件模塊,這些動作無論哪個運行級別都是需要優(yōu)先執(zhí)行的。僅當rc.sysinit執(zhí)行完以后init才會執(zhí)行其他的boot或bootwait動作。

      如果沒有其他boot、bootwait動作,在運行級別3下,/etc/rc.d/rc將會得到執(zhí)行,命令行參數(shù)為3,即執(zhí)行 /etc/rc.d/rc3.d/目錄下的所有文件。rc3.d下的文件都是指向/etc/rc.d/init.d/目錄下各個Shell腳本的符號連接,而這些腳本一般能接受start、stop、restart、status等參數(shù)。rc腳本以start參數(shù)啟動所有以S開頭的腳本,在此之前,如果相應的腳本也存在K打頭的鏈接,而且已經(jīng)處于運行態(tài)了(以/var/lock/subsys/下的文件作為標志),則將首先啟動K開頭的腳本,以stop 作為參數(shù)停止這些已經(jīng)啟動了的服務(wù),然后再重新運行。顯然,這樣做的直接目的就是當init改變運行級別時,所有相關(guān)的服務(wù)都將重啟,即使是同一個級別。

      rc程序執(zhí)行完畢后,系統(tǒng)環(huán)境已經(jīng)設(shè)置好了,下面就該用戶登錄系統(tǒng)了。

      七.getty和login

      在rc返回后,init將得到控制,并啟動mingetty(見第五節(jié))。mingetty是getty的簡化,不能處理串口操作。getty的功能一般包括:


      打開終端線,并設(shè)置模式
      輸出登錄界面及提示,接受用戶名的輸入
      以該用戶名作為login的參數(shù),加載login程序
      缺省的登錄提示記錄在/etc/issue文件中,但每次啟動,一般都會由rc.local腳本根據(jù)系統(tǒng)環(huán)境重新生成。

      注:用于遠程登錄的提示信息位于/etc/中。

      login程序在getty的同一個進程空間中運行,接受getty傳來的用戶名參數(shù)作為登錄的用戶名。

      如果用戶名不是root,且存在/etc/nologin文件,login將輸出nologin文件的內(nèi)容,然后退出。這通常用來系統(tǒng)維護時防止非root用戶登錄。

      只有/etc/securetty中登記了的終端才允許root用戶登錄,如果不存在這個文件,則root可以在任何終端上登錄。/etc/usertty文件用于對用戶作出附加訪問限制,如果不存在這個文件,則沒有其他限制。

      當用戶登錄通過了這些檢查后,login將搜索/etc/passwd文件(必要時搜索 /etc/shadow文件)用于匹配密碼、設(shè)置主目錄和加載shell。如果沒有主目錄,將默認為根目錄;如果沒有shell,將默認為 /bin/sh。在將控制轉(zhuǎn)交給shell以前, getty將輸出/var/log/lastlog中記錄的上次登錄系統(tǒng)的信息,然后檢查用戶是否有新郵件(/usr/spool/mail/ {username})。在設(shè)置好shell的uid、gid,以及TERM,PATH 等環(huán)境變量以后,進程加載shell,login的任務(wù)也就完成了。

      八.bash

      運行級別3下的用戶login以后,將啟動一個用戶的shell,以下以/bin/bash為例繼續(xù)我們的啟動過程。

      bash 是Bourne Shell的GNU擴展,除了繼承了sh的所有特點以外,還增加了很多特性和功能。由login啟動的bash是作為一個登錄shell啟動的,它繼承了 getty設(shè)置的TERM、PATH等環(huán)境變量,其中PATH對于普通用戶為"/bin:/usr/bin:/usr/local/bin",對于 root 為"/sbin:/bin:/usr/sbin:/usr/bin"。作為登錄shell,它將首先尋找/etc/profile 腳本文件,并執(zhí)行它;然后如果存在~/.bash_profile,則執(zhí)行它,否則執(zhí)行 ~/.bash_login,如果該文件也不存在,則執(zhí)行~/.profile文件。然后bash將作為一個交互式shell執(zhí)行~/.bashrc文件(如果存在的話),很多系統(tǒng)中,~/.bashrc都將啟動 /etc/bashrc作為系統(tǒng)范圍內(nèi)的配置文件。

      當顯示出命令行提示符的時候,整個啟動過程就結(jié)束了。此時的系統(tǒng),運行著內(nèi)核,運行著幾個核心線程,運行著init進程,運行著一批由rc啟動腳本激活的守護進程(如 inetd等),運行著一個bash作為用戶的命令解釋器。

      附:XDM方式登錄
      如果缺省運行級別設(shè)為5,則系統(tǒng)中不光有1-6個getty監(jiān)聽著文本終端,還有啟動了一個XDM的圖形登錄窗口。登錄過程和文本方式差不多,也需要提供用戶名和口令,XDM 的配置文件缺省為/usr/X11R6/lib/X11/xdm/xdm-config文件,其中了 /usr/X11R6/lib/X11/xdm/xsession作為XDM的會話描述腳本。登錄成功后,XDM將執(zhí)行這個腳本以運行一個會話管理器,比如gnome-session等。

      除了XDM以外,不同的窗口管理系統(tǒng)(如KDE和GNOME)都提供了一個XDM的替代品,如gdm和kdm,這些程序的功能和XDM都差不多。
       

      關(guān)鍵詞:顯示器定時器
      全年征稿/資訊合作 聯(lián)系郵箱:1271141964@qq.com

      免責聲明

      • 凡本網(wǎng)注明"來源:智能制造網(wǎng)"的所有作品,版權(quán)均屬于智能制造網(wǎng),轉(zhuǎn)載請必須注明智能制造網(wǎng),http://towegas.com。違反者本網(wǎng)將追究相關(guān)法律責任。
      • 企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔責任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責任。
      • 本網(wǎng)轉(zhuǎn)載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品來源,并自負版權(quán)等法律責任。
      • 如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

      <
      更多 >

      工控網(wǎng)機器人儀器儀表物聯(lián)網(wǎng)3D打印工業(yè)軟件金屬加工機械包裝機械印刷機械農(nóng)業(yè)機械食品加工設(shè)備制藥設(shè)備倉儲物流環(huán)保設(shè)備造紙機械工程機械紡織機械化工設(shè)備電子加工設(shè)備水泥設(shè)備海洋水利裝備礦冶設(shè)備新能源設(shè)備服裝機械印染機械制鞋機械玻璃機械陶瓷設(shè)備橡塑設(shè)備船舶設(shè)備電子元器件電氣設(shè)備


      我要投稿
      • 投稿請發(fā)送郵件至:(郵件標題請備注“投稿”)1271141964.qq.com
      • 聯(lián)系電話0571-89719789
      工業(yè)4.0時代智能制造領(lǐng)域“互聯(lián)網(wǎng)+”服務(wù)平臺
      智能制造網(wǎng)APP

      功能豐富 實時交流

      智能制造網(wǎng)小程序

      訂閱獲取更多服務(wù)

      微信公眾號

      關(guān)注我們

      抖音

      智能制造網(wǎng)

      抖音號:gkzhan

      打開抖音 搜索頁掃一掃

      視頻號

      智能制造網(wǎng)

      公眾號:智能制造網(wǎng)

      打開微信掃碼關(guān)注視頻號

      快手

      智能制造網(wǎng)

      快手ID:gkzhan2006

      打開快手 掃一掃關(guān)注
      意見反饋
      關(guān)閉
      企業(yè)未開通此功能
      詳詢客服 : 0571-87858618