天天看點

QNX網絡驅動-裝置驅動編寫處理方式

鋒影

e-mail:[email protected]

第一部分: QNX系統的安裝與使用 1.QNX的微核心,甚至不包括程序管理,僅提供程序間的通信(Software Bus)。但在實際編譯的系統中,仍然是程序排程、同步、程序間通信等編譯在同一個可執行檔案中的,它就是/boot/sys/procnto (QNX6). 

2.QNX 4.x僅支援x86,QNX 6.x可支援PowerPC等 

3.QNX 4.x隻有Process,沒有Thread,QNX 6.x都有了,這跟POSIX 1003 – 2001是同步的。 

4.如何建立啟動鏡像:(QNX4) 

1.在/boot/build裡,install.1是啟動鏡像的配置檔案 

2.cd /boot 

3.make b=install.1 

4.上述步驟會成功編譯出/boot/images/install.1鏡像檔案(該檔案為MS-DOS可執行檔案),其中包含了/boot/build/install.1配置檔案中指定的所有可執行檔案的映象(如Proc32、Slib32等)。 

5.copy install.1 到 /.boot即可

5.clear螢幕,使用ctrl+l 

6.檔案系統/塊裝置的驅動,qnx4在/bin下,如Fsys.eide,而qnx6在/sbin目錄下。 

7.塊裝置命名,可以通過/boot/build/install.1的裝置驅動加載參數來指定,一般會是hd0.0(對應primary master)、hd0.1(對應primary slave)、h1.0(對應secondary master)、hd1.1(對應secondary slave)。 

8.hd0t79,其中t79是指type 和type id 

9.添加塊裝置後,可以使用fdisk進行分區,如fdisk /dev/hd0.1,分區後,檢視/dev/hd*還隻能看見/dev/hd0.1,要查找新分出來的分區,需要使用mount –p /dev/hd0.1 (probe)。 

10.啟動過程

QNX網絡驅動-裝置驅動編寫處理方式

11.如何制作軟碟啟動的系統(QNX4) 

1.cd /boot 

2.make b=floppy 

3.格式化軟驅fdformat /dev/fd0;初始化軟驅dinit –hb /dev/fd0;将軟碟挂載到/fd - mount /dev/fd0 /fd 

4.cp /boot/images/floppy /fd/.boot,啟動映象就好了。 

5.mkdir etc;mkdir etc/config;mkdir bin;mkdir usr;mkdir /usr/bin 

6.cp /etc/config/sysinit.floppy /fd/etc/config/sysinit 

7.cp /etc/logo.F /fd/etc/ 

8.将必要的一些二進制檔案從/bin/或/usr/bin拷貝到/fd/bin或/fd/usr/bin(對應的),如ls、pax、fcat、esh、sh、echo、vi、Dev、Fsys.eide、mount、rm、rmdir、mv、melt、Fsys、Dev、Dev.con、chkfsys、ps、prefix、emu87、mount、rtc、df、dinit、fdformat等。 

9.修改/etc/config/sysinit,進而加載硬碟驅動,添加下面一行:

/bin/Fsys.eide fsys –Ndsk0 –n0=hd0. –n5=cd0. eide –a1f0 –i14 

10.重新啟動,從軟碟加載,搞定。 

11.關機指令:shutdown –b(完全關機不重新開機)

12.使用者環境

Boot Image -> /etc/config/sysinit.node -> /etc/profile -> $HOME/.profile 13.壓縮解壓 

1.melt / freeze,前者釋放abc.F為abc,後者将abc壓縮為abc.F(only for QNX4) 

2.gzip / gunzip

14.拷貝 

1.cp 

2.cpio

第二部分:QNX網絡 QNX有很強的網絡功能,最具特色的是它的FLEET Networking,該技術架構可以将跨接于不同網絡(如Ethernet + Token)的節點直接連結起來,使用者程式隻需要使用msg_send即可跟網絡上的任意qnx節點通信。 Fleet Network的配置需修改: 1.配置結點号

修改/boot/build/install.1檔案名為install.x(x為你要的ID,比如2,下同),修改install.2中的$ /boot/sys/Proc32 –l 1為$ /boot/sys/Proc32 –l 2,後面這個2就是結點号。 2.生成新的image 

1.cd /boot 

2.make b=install.2 

3.cp images/install.2 /.boot

3.修改配置檔案 

1.cd /etc/config 

2.cp sysinit.1 sysinit.2 

3.cp inetd.1 inetd.2 

4.cd bin 

5.cp Input.1 Input.2 

6.cp ph.1 ph.2 

7.cp tcpip.1 tcpip.2 

8.修改tcpip.2,兩個内容,一個是ip位址,如果想使用dhcp,則注釋掉/usr/ucb/ifconfig en1 10.1.1.119 node$NODE up,替換為/usr/ucb/dhcp.client

9.然後修改/.licenses,将license添加進去 

10.最後修改/etc/config/netmap,把網内的各個節點添加進去,完成

4.使用netmap –f,即時更新網絡節點表,使用netmap可檢視現有的 節點,使用alive可檢視各節點的線上狀況 

5.如過網卡不靈等,可用以下指令來重新開機相關服務。 

1.slay Net 

2.Net & 

3.Net.ether2100 –l1 –p0x1080 –i9 & 

4.slay Socklet 

5.Socklet node2 &

其它網絡相關部分 1. 如何控制遠端機器:ditto –n3 –k,即可控制遠端node3。 2. 如何檢視網卡狀态:netstat –in 3. 如何檢視路由表: netstat –rn 4. 如何使用遠端桌面:phindows –n/dev/photon,在qnx側則需要激活phrelay(inetd)。 5. 如何查PCI卡的IO位址和中斷:show pci 6. 如何進入另外一台機起:on –f 3 /bin/sh 7. 如何檢查網絡監聽:netstat –an 8. 如何檢視啟動後系統執行過的指令: sin ar 9. sin mem:目前程序虛拟位址配置設定情況 10. sin –t: 檢視每個程序用了多少CPU時間。 關于QNX網絡架構—— 從驅動到應用層:Net -> Net.ether -> Socket/Socklet -> inetd -> nfsd 配置工具:ifconfig、route、hostname、netmap 查詢工具:netstat、alive 第三部分:QNX6基礎 1.Build Boot Image 

1./boot/build仍然是build啟動映象的配置檔案 

2.bios.build是X86通用的 

3.mkifs –v bios.build bios.img

2.在momentics中生成一個啟動映象(支援硬碟和QNX4檔案系統) 

1.生成QNX System Builder Project,在build檔案生成一節,選擇導入/boot/build/bios.build檔案。 

2.輕按兩下打開project.bld,在binaries中加入devb-eide 

3.在DLL中加入cam-disk.so、io-blk.so、fs-qnx4.so。 

4.在share library中加入libcam.so.2 

5.點選bios,右鍵菜單調出properties視窗,在SYSTEM的PATH、LD_LIBRARY_PATH中添加必要的路徑,包括/bin:/sbin:/usr/bin:/usr/sbin等PATH以及/lib:/usr/lib等庫路徑。 

6.修改bios.bsh,在PCI的section後增加硬碟驅動的部分

i. #start IDE drive ii. devb-eide & iii. waitfor /dev/hd0t79 iv. mount /dev/hd0t79 / v. waitfor /bin 7.修改bios.bsh,在最後增加啟動/etc/system/sysinit腳本的部分。

i. [+session] sh –c “/etc/system/sysinit” ii. 最後注釋掉ide驅動和這之間的其它部分。 8.編譯生成bios.ifs,拷貝該檔案到/.boot即可。

1.其它

QNX6的啟動腳本已經更象Linux/Unix了,包括了sysinit和rc.d。而QNX6的裝置驅動則遠比4要靈活——順便提一下,QNX4甚至沒有提供DDK給使用者,幾乎所有的QNX4下的裝置驅動都是QNX公司自己開發的(或受客戶委托開發)。QNX6則改變了這一局面——而且QNX6已經完全開源了,QNX6使用者也不再受那些license的困擾,普通個人使用者可以直接下載下傳和安裝QNX6的RTOS和開發環境,包括使用Qnet——要知道,QNX4的Fleet Network倘若沒有2個以上的licenses,是無法使用的。 第四部分:關于QNX6的網絡架構和Qnet QNX6的網絡尤其是它的Qnet與QNX4一樣獨具特色。相對而言,QNX4的Fleet Network無論從配置還是使用來講都要顯得複雜一些,也要偏僻一些。而QNX6的Qnet則大大簡化了配置的複雜性,也同時在盡量讓遠端的通路顯得更正常。 首先,QNX6的網絡驅動不同于qnx4的Net + Net.ether + Socket/Socklet或netmap的方式,而是采用了子產品化更強,更靈活也更具一緻性的方式。這個改變應當源于QNX6底層架構的更新。 從QNX6的啟動看,在x86上,首先由BIOS啟動startup-bios(一個二進制包),然後就啟動了微核心procnto,緊接着在啟動腳本裡開始加載一些驅動。首先加載的一般是一個console,devc-con;然後應當加載pci-bios,試PCI總線開始工作;接着加載硬碟驅動和檔案系統;最後啟動一些程序通信管理程式,如mqueue、pipe等。 在QNX6裡,網絡、硬碟與其它裝置(如音頻)一樣,都由一個io-xxx的程式來管理,硬碟是io-blk,網絡則是io-net,而音頻則是io-audio。但它們之間也有差别,比如硬碟,可執行的程式是devb-eide(常用的字元裝置和塊裝置好像都是這個方式),而網絡的則是io-net(net、audio這些好像是一樣的),這多少顯得有些怪異。 扯遠了,回到io-net。 io-net的啟動一般帶一些參數,這些參數可以在加載網卡驅動的同時,加載各種協定棧,包括tcpip和Qnet。比如: # io-net –dpcnet –ptcpip –pqnet 這一步操作即可在vmware虛拟機上跑的qnx6中成功加載網卡驅動、tcpip協定棧和Qnet協定棧。通過下面的指令可以檢查io-net加載的狀況: # ls /dev/io-net en0 ip0 ip_en qnet_en 此外,還有一種方式可以向已經啟動的io-net中添加裝置驅動和協定棧。比如: # slay io-net # io-net # mount –Tio-net devn-pcnet.so # mount –Tio-net npm-tcpip.so # mount –Tio-net npm-qnet.so 這三個操作便向io-net添加了pcnet網卡驅動、tcpip和qnet協定棧。 其它一些指令: 1.檢視io-net中已經加載的驅動:ls /dev/io-net 

2.檢視網絡中其它的qnet節點:ls /net 

3.通路網絡中其它的qnet節點:cd /net/nodename(切換到目标結點的根目錄).至于節點名稱,則是通過hostname來設定的。

繼續閱讀