UCLinux ve S3C4510B'ye dayalı ağ iletişim tasarımı

Giriş

Linux, UNIX sistemleriyle uyumlu ve açık kaynak kodlu çok popüler bir işletim sistemidir. Başlangıçta bir masaüstü sistemi olarak tasarlanmıştı ve şimdi gömülü cihazlarda yaygın olarak kullanılmaktadır. uCLinux bu atmosferde yaratıldı. İngilizce uCLinux kelimesinde u, "küçük" anlamına gelen Mikro anlamına gelir; C, "kontrol" anlamına gelen Kontrol anlamına gelir, bu nedenle uCLinux, "mikro kontrol alanı için tasarlanmış" anlamına gelen Micro-Control-Linux'tur. Linux sistemi ". Aynı zamanda MMU (Memory Management Unit Module) olmayan mikroişlemciler için tasarlanmış bir işletim sistemidir. S3C4510B, bu kategorideki bir mikroişlemcidir.

Samsung S3C4510B, ARM tarafından tasarlanan 16/32-bit ARM7TDMI RISC işlemci çekirdeği içeren bir Ethernet uygulama sistemine dayalı, uygun maliyetli bir 16/32-bit RISC mikro denetleyicidir. ARM7TDMI, fiyat ve güce duyarlı uygulamalar için en uygun olan düşük güçlü, yüksek performanslı bir 16/32 çekirdektir. ARM7TDMI çekirdeğine ek olarak, S3C4510B, S3C4510B sistemi ve diğer ekipmanlar arasındaki ağ iletişim projesi için bir Ethernet denetleyicisi dahil olmak üzere birçok önemli yonga üstü çevresel işlev modülüne de sahiptir. UCLinux işletim sistemi, S3C4510B'nin ağ kontrol platformuna aktarılır ve bu gömülü platformda çeşitli ağ kontrol işlevleri gerçekleştirilir. Bu makalede açıklanan ağ iletişim projesi en önemli işlevdir.

1 S3C4510B Ethernet devresine dayalı tasarım fikirleri ve gerçekleştirme

Mükemmel bir ağ denetleyicisi olarak, S3C4510B tabanlı sistem bir Ethernet arayüzüne sahip değilse, uygulama değeri büyük ölçüde azalacaktır.Bu nedenle, tüm sistem söz konusu olduğunda, Ethernet arayüz devresi vazgeçilmez olmalıdır, ancak aynı zamanda nispeten Daha karmaşık. Donanım açısından bakıldığında, Ethernet arayüz devresi temel olarak iki bölümden oluşur: MAC denetleyicisi ve fiziksel katman arayüzü (Fiziksel Katman, PHY).

S3C4510B bir Ethernet denetleyicisi içerir, Medyadan Bağımsız Arabirimi (MII) ve Arabelleğe Alınmış DMA Arabirimini (BDI) destekler, yarı çift yönlü veya tam çift yönlü mod 0M / 100Mbps'de bilgi sağlayabilir Ethernet erişimi. Yarı çift yönlü modda, denetleyici CSMA / CD protokolünü destekler ve tam çift yönlü modda IEEE802.3 MAC kontrol katmanı protokolünü destekler. Bu nedenle, S3C4510B aslında Ethernet MAC kontrolü içerir, ancak fiziksel bir katman arayüzü sağlamaz, bu nedenle bir Ethernet erişim kanalı sağlamak için harici bir fiziksel katman çipine ihtiyaç vardır.

Yaygın olarak kullanılan tek bağlantı noktalı 10M / 100Mbps yüksek hızlı Ethernet fiziksel katman arabirim aygıtları esas olarak RTL8201, DM9161, vb. İçerir, tümü MII arabirimi ve S3C4510B ile kolayca arabirim oluşturulabilen geleneksel 7 kablolu ağ arabirimi sağlar. Ethernet fiziksel katman arayüz cihazlarının ana işlevleri genellikle şunları içerir: fiziksel kodlama alt katmanı, fiziksel ortam aksesuarları, bükülü çift fiziksel ortam alt katmanı, 10BASE-TX kodlayıcı / kod çözücü ve bükülü çift ortam erişim birimi.

Bu tasarımda, Ethernet'in fiziksel katman arayüzü olarak DP9161'i kullanın. DM9161, düşük güçlü, yüksek performanslı bir CMOS çipidir, 10M ve 100M Ethernet iletimini destekler, giriş ve çıkış verilerini kodlama ve kod çözme rolünü oynar. S3C4510B ile arasındaki pin bağlantısı Şekil 1'de gösterilmektedir.

S3C4510B yongası sivil kullanım için MII arabirimine sahip bir MAC denetleyicisine sahip olduğundan ve DM9161 ayrıca bir MII arabirimi sağladığından, çeşitli sinyallerin tanımı da çok nettir, bu nedenle DM9161 ve S3C4510B'nin bağlantı dizisi iyi ağ sinyali iletimi elde etmek için bağlanabilir. amaç. Şekil 2, bu sistemdeki DM9161'in gerçek uygulama devresini göstermektedir (şeklin sağ alt kısmındaki 1, 2, 3 ve 14, 15, 16, ağ izolasyon transformatörünün karşılık gelen pinlerine bağlanmıştır).

S3C4510B'nin MAC denetleyicisi, MDC / MDIO yönetim arayüzü aracılığıyla bir DM9161'e kadar kontrol edebilir ve her DM9161'in farklı bir PHY adresi olmalıdır (00001B'den 11111B'ye). Sistem sıfırlandığında, DM9161, S3C4510B yönetim arayüzü ile iletişim projesinin PHY adresi olarak 9, 10, 12, 13 ve 15 numaralı pimlerin başlangıç durumunu kilitler; ancak adres 00000B olarak ayarlanamaz, aksi takdirde DM9161 güç kapatma moduna girer.

Sinyal gönderme ve alma uçları, ağ izolasyon transformatörü ve RJ45 arabirimi aracılığıyla iletim ortamına bağlanmalıdır.Gerçek uygulama devresi kitap odasında gösterilir.

şekil 2

2 Linux altında ağ programlama protokol analizi

Linux altında TCP / IP ağ protokol yığınının çeşitli katmanları, bir dizi birbirine bağlı yazılım katmanı aracılığıyla İnternet adres ailesini uygular.Yapı seviyesi Şekil 4'te gösterilmektedir.

Bunların arasında, BSD soket katmanı, BSD soketlerini işlemek için özel olarak kullanılan genel soket yönetim yazılımı tarafından işlenir ve INET soket katmanı tarafından desteklenir. INET soketi, IP tabanlı bir protokol olan TCP ve UDP yönetimi iletim uç noktasıdır. UDP (Kullanıcı Datagram Protokolü) bağlantısız bir protokoldür ve TCP (İletim Kontrol Protokolü) güvenilir bir uçtan uca protokoldür. UDP paketlerini iletirken Linux, hedeflerine güvenli bir şekilde ulaşıp ulaşmadıklarını bilmez veya umursamaz. TCP farklıdır. TCP bağlantısının her iki ucunun da, iletilen verilerin doğru şekilde alınmasını sağlamak için bir sayı eklemesi gerekir. IP katmanında İnternet protokol kodu uygulanır.Bu kodların iletilen verilere bir IP başlığı eklemesi ve gelen IP paketinin TCP veya UDP protokolüne nasıl gönderileceğini bilmesi gerekir. IP katmanının altında PLIP, SLIP ve Ethernet gibi tüm Linux ağ çalışmalarını destekleyen ağ cihazları bulunmaktadır.

UClinux ortamında 3 soket programlama

Ağ soketi veri b iletimi özel bir G / Ç'dir Soket ayrıca bir dosya tanımlayıcıdır ve ayrıca dosya benzeri bir işlev çağrı soketine sahiptir. Bu işlev bir tamsayı soket tanımlayıcısı döndürür ve bağlantı kurulması ve veri aktarımı gibi sonraki işlemler bu soket işlevi aracılığıyla gerçekleştirilir. Yaygın olarak kullanılan iki soket türü vardır: akış soketleri ve veri birimi soketleri. İkisi arasındaki fark şudur: İlki TCP hizmetine karşılık gelir ve ikincisi UDP hizmetine karşılık gelir.

3.1 uCLinux'ta soket programlamada kullanılan fonksiyonlar

(1) Soket işlevi

G / Ç gerçekleştirmek için, bir işlemin yapması gereken ilk şey soket işlevini çağırmak ve istenen iletişim protokol türünü belirlemektir (IPv4 kullanan TCP, IPv6 kullanan UDP, Unix alan bayt akışı protokolü, vb.) Fonksiyon yapısı aşağıdaki gibidir. : Int soket (int ailesi, int tipi, int protokolü);

/ * Dönüş: olumsuz olmayan açıklama kelimesi başarı, -1 hata * /

Koddaki aile protokol ailesini gösterir. Soketin tipi sabit bir değerdir. Genel olarak, işlev soketinin ana parametre protokolü 0'a ayarlanır ve yuva işlevi, başarılı olduğunda küçük, negatif olmayan bir tamsayı değeri döndürür. Bu değeri elde etmek için protokol ailesini (IPv4IP, v6 veya Unix) ve soket tipini (bayt akışı, datagram veya ham soket) belirleriz.

(2) bağlantı işlevi

TCP istemcisi, TCP sunucusuyla bağlantı kurmak için bağlan işlevini kullanır.

Int connect (int sockfd, const struct sockaddr * servaddr, socklen_t addrlen); / * Dönüş: 0 - başarı, -1 - hata * /

Sockfd, soket işleviyle bir değer döndürür.İkinci ve üçüncü parametreler, bir toplu iş soket adres yapısına ve yapının boyutuna bir göstericidir. Soket yaprağı adres yapısı, sunucunun IP adresini ve bağlantı noktası numarasını içermelidir.

(3) bağlama işlevi

Bağlama işlevi, sokete yerel bir protokol adresi atar. İnternet Protokolü için protokol adresi, 16 bitlik tersine çevrilmemiş 2 bitlik IPv4 adresinin TCP veya UDP bağlantı noktası numarasının bir kombinasyonudur.

Int bind (int sockfd, const struct sockaddr * myaddr, socklen_t addrlen); / * Dönüş: 0 - başarı, -1 - hata * /

İkinci parametre, protokole özgü adres yapısının bir göstericisidir ve üçüncü parametre, adres yapısının uzunluğudur. TCP için, bağlama işlevini çağırmak bir bağlantı noktası ve bir IP adresi belirleyebilir. İkisini birden belirtebilir veya hiçbirini belirtemezsiniz.

(4) dinleme işlevi

Listen işlevi yalnızca bölen TCP sunucusu tarafından çağrılır. İki şey yapar: Fonksiyon soketi bir soket oluşturduğunda, aktif bir soket olduğu varsayılır. Başka bir deyişle, bir bağlantı başlatmak için connect çağıran bir istemci soketidir.Line işlevi, bağlantısız soketi pasif bir sokete dönüştürerek çekirdeğin bu sokete bağlantı isteklerini kabul etmesi gerektiğini belirtir. Dinleme işlevinin TCP durum geçişine göre çağrılması, soketin KAPALI durumundan LISEN durumuna geçmesine neden olur. İşlevin ikinci parametresi, çekirdeğin bu soket için kuyruğa aldığı maksimum bağlantı sayısını belirtir.

Int listen (int sockfd, int biriktirme listesi);

/ * Dönüş: 0 başarı, -1 hata * /

Genel olarak bu işlev, işlev soketi ve bind çağrıldıktan sonra ve kabul işlevi çağrılmadan önce çağrılmalıdır.

(5) İşlevi kabul et

Kabul işlevi TCP sunucusu tarafından çağrılır ve tamamlanan bağlantı kuyruğunun başından sonraki tamamlanan bağlantıyı döndürür. Tamamlanan bağlantı kuyruğu boşsa, işlem uyur. (Soketin varsayılan engelleme modu varsayıldığında)

int accept (int sockfd, struct sockaddr * cliaddr, socklen_t * addrlen); / * Negatif olmayan bir değer döndürür - Tamam, -1 - hata * /

Cliaddr ve addrlen parametreleri, bağlı işlemin (istemci) protokol adresini döndürmek için kullanılır. Addrlen, sonuç parametresidir. Çağırmadan önce, * addrlen ile gösterilen tamsayı değerini cliaddr tarafından amaçlanan soket adres yapısının uzunluğuna ayarlayın. Döndüğünde, bu tamsayı değeri çekirdek tarafından soket adres yapısında saklanan tam kelimedir. Bölüm numarası.

3.2 uClinux'ta ağ iletişim programlamasının gerçekleştirilmesi

UCLinux'ta soket programlama için, ağ uygulama programları genellikle kitaplarda gösterilen prosedürlere göre yazılır.

Önceki makalede önerilen işlevlere aşina olmanın yanı sıra, iki önemli veri yapısını da bilmelisiniz. Çünkü bilgisayarda, veri depolamanın iki bayt önceliği vardır: önce yüksek bayt ve önce düşük bayt. İnternette veri, yüksek sıralı bayt önceliği sırasına göre iletilir Bu nedenle, düşük sıralı bayt önceliği modunda dahili olarak depolanan veriler için, dönüşümün İnternet üzerinden iletilmesi gerekir.

* struct sockaddr: soket bilgilerini kaydetmek için kullanılır

struct sockaddr {unsigned short sa_family; / * Adres ailesi, AF_xxx * /

char sa_data; / * 14 baytlık protokol adresi * /};

* struct sockaddr_in; ve veri türü dönüşümü için

struct sockaddr_in {

short int sin_family; / * Adres ailesi * /

işaretsiz kısa int sin_port; / * Bağlantı noktası numarası * /

sruct in_addr sin_addr; / * IP adresi * /

unsigned cha sin_zero; / * struct sockaddr ile aynı boyutu korumak için 0 ile doldurulur * /};

Şimdiye kadar uCLinux ağ iletişim mühendisliği programı derlenebilir. Ağ iletişimi kaynak kodunun ve Makefile dosyasının uCLinux altında nasıl uygulanacağına dair bazı örnekler aşağıda verilmiştir.

Ana işlevdeki kodun bir kısmı aşağıdaki gibidir:

int sockfd;

imzasız int uiip;

char szsendbuf;

karakter başı;

int * phead = head + 4, nsize = 1024, allsize = 0;

struct sockaddr_in servaddr;

sockfd = soket (AF_INET, SOCK_STREAM, 0); / * Soket oluştur * /

bzero (servaddr, sizeof (struct sockaddr_in));

servaddr.sin_family = AF_INET;

servaddr.sin_port = 8888; // htons (8888); / * İletişim bağlantı noktasını belirtin * / Komut satırına girilen IP dizesini connect işlevi tarafından tanınabilen bir tamsayı uiip'e dönüştürün. Başlangıçta, inet_pton C kütüphanesi işlevi Linux üzerinde geliştirilirken kullanılabilirdi, ancak bu işlev uCLinux kitaplığında desteklenmiyor, bu yüzden işlevi kendim uygulamak zorunda kaldım.

aiptoi aşağıdaki gibidir:

aiptoi (argv, uiip);

servaddr.sin_addr.s_addr = uiip; / * Bağlantının uzak IP'sini belirtin * /

connect (sockfd, (struct sockaddr) servaddr, sizeof (struct sockaddr));

/ * Alıcı bitiş koduna bağlan * /

fp = fopen ("kongzhi.htm", "r"); / * Kontrol sayfasını aç * /

while (nsize == 1024)

{bzero (szsendbuf, 1024); / * Dosyadan her seferinde 024 bayt oku ve 1024 bayttan az okunuyorsa son gönder * /

nsize = phead = fread (szsendbuf, 1,1024, fp); / * Dosyadan okuyun ve gönderen BUFFER'ı doldurun * /

write (sockfd, head, 8); / * Protokol başlığını gönder * /

nsize = write (sockfd, szsendbuf, nsize); / * gönder * /}

fclose (fp);

UCLinux'ta Makefile'ı yapmak için gereken değişiklikler aşağıdaki gibidir:

CC = gcc

COFF2FLAT = / uclinux / coff2flt-0.3 / coff2flt

CFLAGS = -I / uclinux / uC-libc-pic / include

LDFLAGS = / uclinux / uC-libc-pic / libc.a

ethernet: Ethernet.o

$ (CC) -o $ @. Coff ethernet.c $ (CFLAGS) $ (LDFLAGS)

$ (COFF2FLAT) -o Ethernet ethernet.coff

cp Ethernet / Ethernet

temiz:

rm -f Ethernet Ethernet.o

Unutulmamalıdır ki: uCLinux bir pthread kitaplığına sahip değildir, bu nedenle ağ programları yazmayı unutmayın; UCLinux ortamında, ne işlemci (donanım) ne de çekirdek (yazılım) bir bellek yönetim mekanizması sağlamaz, dolayısıyla program adres alanı Belleğin fiziksel adres alanına eşdeğerdir. G / Ç adresi, G / Ç alanına başvurmaya ve serbest bırakmaya gerek kalmadan doğrudan program içinde çalıştırılabilir, ancak kullanıcının çalıştırılan G / Ç adresinin kullanım durumunu kontrol etmesi gerekir.

Sonuç

Ağ iletişim mühendisliği gömülü cihazlarda yaygın olarak kullanıldığından, önceki makaleler genel olarak ağ iletişim tasarımının yalnızca belirli bir yönünü açıklamaktadır. Bu makale, donanım devresi yapımından, uygulama yazılımı tasarım noktalarından gerçek projeyi birleştirir. Bu, gömülü cihazlarda, özellikle uCLinux tabanlı sistemlerde ağ iletişiminin uygulanması için önemli bir referans değerine sahiptir.

AET üyeleri için yıl sonu avantajları!

Yeniden doğmak! "Monster Hunter World" avcı tarzı kuponu yayınlandı
önceki
Piyasa değeri bir Facebook düşerse, donanımın yanı sıra, Apple'ın hayal gücü nedir?
Sonraki
"Wolf Warriors 2" patlama özel 727'si planlanandan önce ateşleniyor
Hollywood'da başarılı olmak için sarı ten mi ünlü olmalı?
"Ark Survival Evolved" mobil platforma inecek, oyunun kendisi ücretsiz
En güzel iş fotoğrafları! İtfaiyeciler çörek yemek için 10 saat mücadele etti
Bu Sifan: Telekomünikasyon bürosu personelinden "Da Hu Fa" nın müdürüne
"Mükemmel blog yayını" Altium_Designer beceri notlarını kullanmalıdır (1)
Youku ile standart tam ekran ve derinlemesine işbirliği, PPTV smart TV beş seri yeni ürün yayınladı
Sling Google, Nvidia, Huawei "dünyanın en güçlü" iki AI çipini piyasaya sürdü
Qiyang: Zenginleşmenin "Altın Meyvesi", Halkın Yoksulluktan Kurtulması İçin "Tezahürat"
"Çeşitli Güzellik Hırsızı" Shu Qi, bu dizide küçük bir fark var
Yılın En İyi On'u · Şiddet Acı çektiğiniz herhangi bir şey var mı?
Hengdong: Yoksulluğu azaltma üssü, akıllı tarım, haşere kontrolü için insansız hava araçları
To Top