Phát triển trình điều khiển trên các lõi hệ điều hành

Một phần của tài liệu tích hợp dịch vụ đo và kiểm soát từ xa sử dụng fpga (Trang 59 - 68)

Để ứng dụng của hệ điều hành có thể giao tiếp với các thiết bị phần cứng, cần có một tầng ứng dụng trung gian giữa ứng dụng của hệ điều hành và các thiết bị gọi là trình điều khiển, nó có nhiệm vụ xây dựng các API mức cao giao tiếp với ứng dụng trên hệ điều hành và chuyển thành các lệnh giao tiếp bậc thấp dạng vào ra cơ sở cho các thiết bị phần cứng. Vì uClinux tuân theo các quy ước của Unix, mọi thứ được thực hiện qua tệp. Do đó phần cứng được địa chỉ hóa qua một tệp có liên quan đến thiết bị gọi là tệp thiết bị. Có ba loại trình điều khiển thông dụng tương ứng cho ba loại thiết bị thông dụng: - Trình điều khiển ký tự (character drivers): điều khiển thiết bị dòng dữ liệu mà chỉ có thể được truy cập một cách tuần tự, và các trình điều khiển truy cập các thiết bị này thông qua tệp thiết bị như “dev/ttyS0” dành cho trình điều khiển cổng com.

- Trình điều khiển khối (block drivers): truy cập các khối dữ liệu, chúng cho phép truy cập ngẫu nhiên, truy cập qua bộ đệm hệ thống, và truy cập qua tệp thiết bị như “/dev/hda” dành cho trình điều khiển ổ cứng.

- Trình điều khiển mạng (network drivers): điều khiển thiết bị hướng gói tin. Các thiết bị này nhận và truyền các gói tin cũng như truy cập

qua các dịch vụ mạng. Thiết bị mạng truy cập thông qua định danh duy nhất, như “eth0”.

Việc phát triển trình điều khiển cho các thiết bị tùy biến của người dùng là rất quan trọng khi mà các thiết bị đó tích hợp trong hệ thống nhúng nhưng chưa được uClinux-dist hỗ trợ trình điều khiển, đặc biệt là các IP người dùng khi xây dựng hệ thống nhúng trên sản phẩm FPGA của Xilinx. Dưới đây là một ví dụ về phát triển một trình điều khiển ký tự cho IP lcd1602 trên kit spartan3E, lưu ý là trình điều khiển chỉ hoạt động đúng nếu ở tầng vật lý đã xây dựng IP đảm bảo đúng yêu cầu về dạng sóng đọc, ghi dữ liệu xuống LCD.

Trong “File Browser” di chuyển đến thư mục

“$PETALINUX/software/petalinux-dist/ linux-2.6.x/drivers/char”, tạo tệp lcd1602.c.

Sau khi soạn thảo xong tệp nguồn, chỉnh sửa lại nội dung tệp Makefile để cho phép biên dịch trình điều khiển vừa soạn thảo, bổ xung thêm mục CONFIG_XILINX_LCD như sau:

Hình 3-15 Sửa nội dung tệp Makefile

Bổ sung mục config XILINX_LCD vào tệp Kconfig để tạo thêm mục cấu hình

Từ dòng lệnh, quay trở lại thư mục “$PETALINUX/software/petalinux-dist” gõ lệnh “make menuconfig” để cấu hình lại hệ nhúng. Trong phần “Device Drivers/character devices” của danh mục “Linux Kernel Configuration”, chọn mục vừa tạo “LCD 1602 device support”:

Hình 3-17 Bổ sung trình điều khiển từ danh mục cấu hình

Lưu và thoát danh mục cấu hình, biên dịch lại ảnh bằng lệnh “make dep” và “make all”, sau khi biên dịch xong, trình điều khiển lcd1602 được tích hợp vào tệp hệ thống, cho phép các ứng dụng người dùng truy cập và điều khiển lcd.

3.3.1. Phát triển ứng dụng người dùng trên uClinux

Như đã nêu trong phần thêm ứng dụng mới, Petalinux cho phép người dùng dễ dàng thêm các ứng dụng và cấu hình tự động bằng lệnh “petalinux- new-app”. Dưới đây là một ví dụ trình bày cụ thể hơn về phát triển ứng dụng người dùng trên uClinux. Chương trình là một ứng dụng đơn giản dùng để hiển thị một dòng văn bản ra lcd trên kit spartan3e.

Đầu tiên thực hiện các bước nạp tệp cài đặt cho petalinux, chọn nhà cung cấp và nền tảng, cấu hình petalinux… như đã nêu trên. Từ dòng lệnh gõ lệnh “petalinux-new-app lcd_test” để thêm ứng dụng “lcd_test”, để ứng dụng này thực thi cần cài đặt trình điều khiển “lcd1602” vào tệp hệ thống nguồn như đã nêu trong phần trên. Từ “File Browser” di chuyển đến thư mục “$PETALINUX/software/user-apps/lcd_test” để viết mã nguồn cho ứng dụng.

Hình 3-18 Chương trình lcd_test

Khi ứng dụng có nhiều tệp nguồn cùng biên dịch, người dùng chỉ cần thêm vào tên tệp nguồn với đuôi .o vào dòng “APP_OBJS=” trong tệp Makefile, như trong đây, ứng dụng chỉ dùng tệp nguồn duy nhất là lcd_test.c nên chỉ có một đối tượng duy nhất là lcd_test.o

Hình 3-19 Sửa nội dung tệp Makefile của ứng dụng mới

Từ dòng lệnh, di chuyển đến thư mục “$PETALINUX/software/user- apps/lcd_test”, gõ lệnh “make” để biên dịch ứng dụng vừa viết, sửa lỗi xảy ra nếu có đến khi biên dịch thành công. Để cài đặt tệp thưc thi của ứng dụng vào tệp hệ thống nguồn, dùng lệnh “make romfs” tại thư mục ứng dụng. Cuối

nhật các tệp ảnh đầu ra. Lúc này ứng dụng lcd_test đã được tích hợp vào tệp hệ thống nguồn. Khi khởi động uClinux trên hệ thống thành công, người dùng có thể gọi ứng dụng này từ lệnh “lcd_test”.

3.3.2. Phát triển chương trình CGI trên uClinux

Giao diện chung cổng (Common Gateway Interface- CGI) là một giao diện giữa web server và các ứng dụng thực thi tùy ý hoặc các mẩu mã mà có thể được gọi từ các trang HTML. Chúng tự cung cấp mã HTML mà sẽ được truyền trở về web server. Perl và C/C++ được dùng phổ biến để viết chương trình CGI. Tất cả các tệp được đặt trong thư mục riêng có giới hạn truy cập như “/cgi-bin” được nhận ra tự động và thực thi bởi web server. Vì perl không được hỗ trợ cho uClinux trong khi C cho hiệu năng xử lí cao được hỗ trợ, toàn bộ các ứng dụng CGI trên uClinux đều sử dụng C để phát triển chương trình. Trong đề tài này, CGI dùng cho việc tạo ảnh động và thao tác điều khiển thiết bị qua web server.

Ví dụ dưới đây sẽ thực hiện phát triển một chương trình CGI để điều khiển màn hình lcd1602 đã nêu trên hiển thị nội dung dòng văn bản nhập vào từ giao diện web khi người dùng nhấp chọn nút “submit”, giao thức sử dụng là POST. Để cho phép web server và chạy ứng dụng CGI, cần chọn web server trong “Network Application” (như fnord web server), và chọn “cgi generic” trong mục “Miscellaneous Configuration”.

Hình 3-20 Chọn dịch vụ web server

Sau khi lưu và thoát khỏi danh mục cấu hình, di chuyển đến thư mục “$PETALINUX/software/petalinux-dist/user/cgi_generic”. Tại thư mục này, tạo ba tệp lcd.c, lcd_temp.c và lcd_temp.h.

Sửa lại nội dung tệp Makefile để cho phép biên dịch thành mã CGI cho tệp nguồn lcd.c và lcd_temp.c như sau:

Hình 3-21 Sửa nội dung tệp Makefile của chương trình CGI mới Từ dòng lệnh qua trở về thư mục “$PETALINUX/software/petalinux- dist”, gõ lệnh “make all” để biên dịch lại dự án, khi biên dịch thành công, trong tệp hệ thống đã có chương trình cgi lcd. Để kiểm tra chương trình, nạp ảnh xuống kit và khởi động uClinux, truy cập vào “//192.168.1.10/cgi-

3.3.3. Lựa chọn các hệ điều hành khác quản lý mạng

Các ứng dụng TCP/IP, UDP/IP cần có sự quản lý và chia sẻ tài nguyên chung phần mềm cũng như phần cứng của hệ thống. Với yêu cầu này ta có thể giải quyết bằng việc sử dụng các hệ điều hành thời gian thực hoặc các hệ điều hành nhúng hoặc cũng có thể xử lý bằng phần mềm lập trình cho hệ thống. Ứng dụng các hệ điều hành thời gian thực và hệ điều hành nhúng thì hệ thống có thể làm việc trong chế độ đa nhiệm, có thể mở rộng rất mạnh mẽ cho các phát triển ứng dụng trong tương lai. Ngoài ra chúng còn có các ưu điểm sau:

- Môi trường phát triển thân thiện, driver có sẵn. - Có sẵn nhiều ứng dụng, trình điều khiển.

- Các sản phẩm của hệ điều hành hỗ trợ phong phú như Linux, Unix, QNX, Novell, Bluecate, Mac OS… nên quen thuộc với mọi đối tượng. Tuy nhiên, nếu sử dụng các hệ điều hành này sẽ gặp các vấn đề sau:

+ Đòi hỏi các hệ FPGA có cấu hình cao.

+ Quy trình biên dịch, tải/nạp phần mềm phức tạp.

Các vấn đề này đã được Xilinx quan tâm và đưa ra nhiều giải pháp làm tối ưu thiết kế. Trong đó có các giải pháp mà Xilinx đã giải quyết phù hợp với người thiết kế

Xây dựng các nhân hệ điều hành tối thiểu hóa như Xilkernel, Standalond… các nhân hệ điều hành chiếm tài nguyên hệ thống đáp ứng được đối với các sản phẩm FPGA cỡ nhỏ.

Xây dựng các thư viện chuẩn LightWeigh IP (LwIP) có sử dụng lớp mô phỏng hệ điều hành.

Mục tiêu của lwIP stack là giảm thiểu tài nguyên sử dụng trong khi vẫn giữ được tính năng của bộ TCP/IP. Điều này cho phép lwIP thích hợp với các hệ nhúng với bộ nhớ khoảng vài chục KB RAM và không gian khoảng 40KB mã ROM. Để giảm tải xử lý và yêu cầu bộ nhớ, lwIP sử dụng phương án API không đòi hỏi sao chép dữ liệu. Các module hỗ trợ bao gồm lớp giả phỏng hệ điều hành, hệ thống quản lý bộ đệm và bộ nhớ, các hàm giao diện mạng, và các hàm kiểm tra cổng Internet.

LightWeigh IP hiện nay được ưu chuộng và là lõi quan tâm với nhiều hãng để phát triển nhất trong các sản phẩm:

- Hệ điều hành mã mở PaulOS của Paul Sheer's sử dụng lwIP làm TCP/IP protocol stack.

- UK based Tangent Devices Ltd tích hợp lwIP trong các thiết bị sản xuất film, ảnh, video của mình….

LwIP sử dụng mô hình tiến trình trong đó mọi giao thức nằm trong một tiến trình và vì vậy hoàn toàn tách biệt với hệ điều hành. Các trình ứng dụng có thể nằm trong tiến trình lwIP, hoặc nằm trong tiền trình khác. Ưu điểm chính là do sử dụng lwIP như một tiến trình độc lập cho phép nó tương thích với các hệ điều hành khác nhau. Vì lwIP được thiết kế để chạy trong hệ điều hành cỡ nhỏ không hỗ trợ trao đổi bộ nhớ ảo.

Để lwIP tương thích với nhiều hệ điều hành, các hàm gọi hệ thống và cấu trúc dữ liệu không được sử dụng trực tiếp trong mã lệnh. Thay vào đó, khi cần các hàm đó, một lớp giả phỏng hệ điều hành được sử dụng. Lớp giả phỏng hệ điều hành cung cấp một giao diện đồng nhất cho các dịch vụ hệ điều hành như timers, đồng bộ tiến trình, và cơ chế truyền thông điệp. Theo nguyên tắc, khi chuyển lwIP sang hệ điều hành khác, chỉ cần điều chỉnh các

Lớp giả phỏng hệ điều hành cung cấp chức năng đồng hồ cho TCP. Đồng hồ được cấp bởi lớp giả phỏng hệ điều hành là kiểu đồng hồ ngắn hạn (200 ms) dùng để gọi một hàm được đăng ký khi xuất hiện time-out.

CHƢƠNG 4 - ỨNG DỤNG CHO QUẢN LÝ TÒA NHÀ THÔNG MINH

Trong những năm gần đây, công nghệ mạng đã phát triển đến một giai đoạn mới. Các ứng dụng có dây và không dây phát triển và đạt đến một trình độ cao. Vượt ra ngoài các thiết bị đầu cuối phục vụ cho nghe, nhìn ... việc tích hợp các thiết bị của hệ nhúng, đầu đo, giám sát …cho sản xuất kinh doanh của các công ty đang được áp dụng mạnh mẽ và có một nhu cầu hết sức to lớn hiện nay. Các thiết bị nhúng được cấu thành từ các nguồn rất khác nhau, về độ phức tạp, năng lực tính toán và đặc biệt giúp tìm kiếm các giải pháp mang tính hệ thống về khắc phục hạn chế tài nguyên mạng. Ở đây các hệ nhúng được thực hiện với việc cứng hoá các dịch vụ sử dụng các vi mạch khả trình tiên tiến như FPGA, DSP… Bên cạnh việc tích hợp các thiết bị cho các ứng dụng đo và giám sát, việc tích hợp các thiết bị trong một môi trường hỗn hợp đa phương tiện cho phép xử lý các thông tin hợp nhất (âm thanh, hình ảnh, số liệu) trong một môi trường rộng lớn như các thông tin gia dụng, các ứng dụng hiện trường, và điều khiển công nghiệp đã và đang có yêu cầu lớn. Từ các ngành cơ khí, hoá chất, năng lượng… cho đến các thiết bị di động nhỏ gọn với tính năng thông minh rất cao đã minh chứng cho thấy các công nghệ, đặc biệt là các công nghệ cao ngày càng đáp ứng đầy đủ các yêu cầu khắt khe của con người. Các thiết bị nhúng với các tác động vào ra tiếp súc hay cảm ứng…đã cho phép đưa dữ liệu, xử lý dữ liệu ngày một hoàn thiện. Luận văn trình bầy phương pháp tích hợp các thành phần của hệ thống, các thành phần đo và điều khiển,… cũng như các thành phần mạng vào một chip FPGA.

Một phần của tài liệu tích hợp dịch vụ đo và kiểm soát từ xa sử dụng fpga (Trang 59 - 68)