Khóa luận Nghiên cứu linux trên hệ thống nhúng và ứng dụng

Tài liệu Khóa luận Nghiên cứu linux trên hệ thống nhúng và ứng dụng: TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ KHOA CÔNG NGHỆ THÔNG TIN CHUYÊN NGHÀNH MẠNG-MÁY TÍNH ………..Y Z……….. KHÓA LUẬN TỐT NGHIỆP ĐỀ TÀI: NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG GVHD:THS HUỲNH HỮU THUẬN SVTH: TRẦN QUANG THUẬN 104102130 PHAN BÁ MINH 103102110 TP Hồ Chí Minh-Tháng 3/2008 Lời cảm ơn Đầu tiên chúng em xin gửi những lời cảm ơn sâu sắc đến Ban giám hiệu trường Đại học Kỹ Thuật Công Nghệ,Khoa Công Nghệ Thông Tin đã tận tình giảng dạy, truyền đạt cho chúng em những kiến thức quý báu. Bên cạnh đó, quý thầy cô đã tạo cho chúng em những điều kiện tốt nhất trong học tập và rèn luyện nhân cách suốt những năm học vừa qua. Chúng em xin gửi những lời biết ơn đặc biệt và chân thành nhất đến thầy Th.s Huỳnh Hữu Thuận vì sự hướng dẫn tận tình cùng sự quan tâm chu đáo để chúng em có thể hoàn thành đề tài này một cách tốt đẹp. Chúng con cũng xin gửi đến bố mẹ của chúng con những tình cảm và lòng tri ân tận đáy lòng. Bố mẹ đã ở bên chúng con ...

pdf138 trang | Chia sẻ: hunglv | Lượt xem: 1212 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Khóa luận Nghiên cứu linux trên hệ thống nhúng và ứng dụng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ KHOA CÔNG NGHỆ THÔNG TIN CHUYÊN NGHÀNH MẠNG-MÁY TÍNH ………..Y Z……….. KHÓA LUẬN TỐT NGHIỆP ĐỀ TÀI: NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG GVHD:THS HUỲNH HỮU THUẬN SVTH: TRẦN QUANG THUẬN 104102130 PHAN BÁ MINH 103102110 TP Hồ Chí Minh-Tháng 3/2008 Lời cảm ơn Đầu tiên chúng em xin gửi những lời cảm ơn sâu sắc đến Ban giám hiệu trường Đại học Kỹ Thuật Công Nghệ,Khoa Công Nghệ Thông Tin đã tận tình giảng dạy, truyền đạt cho chúng em những kiến thức quý báu. Bên cạnh đó, quý thầy cô đã tạo cho chúng em những điều kiện tốt nhất trong học tập và rèn luyện nhân cách suốt những năm học vừa qua. Chúng em xin gửi những lời biết ơn đặc biệt và chân thành nhất đến thầy Th.s Huỳnh Hữu Thuận vì sự hướng dẫn tận tình cùng sự quan tâm chu đáo để chúng em có thể hoàn thành đề tài này một cách tốt đẹp. Chúng con cũng xin gửi đến bố mẹ của chúng con những tình cảm và lòng tri ân tận đáy lòng. Bố mẹ đã ở bên chúng con để động viên và giúp đỡ chúng con về mọi mặt trong những giai đoạn khó khăn khi thực hiện đề tài. Và cuối cùng xin được gửi lời cảm ơn đến tất cả các bạn bè trong và ngoài khoa vì những sự giúp đỡ và tình cảm của các bạn trong những năm tháng nơi giảng đường đại học thân yêu. Sinh viên thực hiện Trần Quang Thuận,Phan Bá Minh Lời nói đầu. Ngày nay,với sự phát triển của các linh kiện điện tử và công nghiệp sản xuất vi mạch,hệ thống Linux nhúng đã xuất hiện hầu như ở khắp mọi khía cạnh trong cuộc sống, từ các thiết bị điện tử dân dụng thông thường đến những thiết bị mạng cao cấp. Nếu so sánh các thiết bị này với các hệ thống nhúng truyền thống thì mức độ phức tạp và khả năng đáp ứng cao hơn rất nhiều.Việc tích hợp hệ điều hành lên hệ thống nhúng làm đơn giản hóa quá trình nghiên cứu và phát triển các sản phẩm, rút ngắn thời gian và chi phí xây dựng hệ thống vì các hệ thống này được thừa hưởng những tính chất ưu việt của một hệ điều hành nói chung cũng như Linux nói riêng, như tính ổn định, nhỏ gọn, thực thi nhanh và có khả năng can thiệp sâu vào phần cứng. Hơn thế nữa, cùng với cộng đồng sử dụng Linux rộng lớn trên khắp thế giới và các phần mềm mã nguồn mở đa dạng làm cho việc phát triển hệ thống Linux nhúng trở thành một chiến lược được các công ty lựa chọn hàng đầu. Nhờ phần mểm mã nguồn mở khiến cho việc tùy biến một ứng dụng phù hợp yêu cầu trở nên dễ dàng hơn. Nhận thức được tầm quan trọng này, đề tài thực hiện việc tìm hiểu Linux cho các hệ thống nhúng và các ứng dụng trên hệ thống nhúng. Phần cứng đề cập đến trong đề tài là kit XUP Virtex-II Pro Development Syste Xilinx (XUPV2P). Cụ thể sẽ tiến hành việc cài đặt hệ điều hành MontaVista Linux – một gói Linux chuyên dành cho các hệ thống nhúng – lên kiến trúc vi xử lý PowerPC405 được tích hợp trên kit XUPV2P. Đồng thời xây dựng các ứng dụng chạy trên hệ điều hành này. Ứng dụng trọng tâm là giao tiếp truyền dữ liệu qua TCP/IP, với server là ứng dụng chạy trên hệ thống nhúng đã cài đặt và client là ứng dụng chạy trên hệ điều hành Windows. Ứng dụng cung cấp khả năng upload, download dữ liệu và có phân quyền với giao diện người dùng thân thiện. Mục lục Chương 1 Linux trên hệ thống nhúng................................................................7 1.1 Khái niệm cơ bản...................................................................................7 1.2 Hệ điều hành Linux nhúng (Embedded Linux).....................................8 1.3 Real-time Linux.....................................................................................9 1.4 Phân loại hệ thống Linux nhúng............................................................9 1.4.1 Kích thước .......................................................................................10 1.4.2 Khả năng đáp ứng theo thời gian ....................................................11 1.4.3 Khả năng kết nối .............................................................................11 1.4.4 Khả năng tương tác với người dùng................................................12 1.5 Kiến trúc tổng quát của một hệ thống Linux nhúng............................12 1.5.1 Khối Data Acquisition.....................................................................13 1.5.2 Khối Control....................................................................................14 1.5.3 Khối System management...............................................................15 1.5.4 Khối User interface .........................................................................16 1.6 Tổng quan về kernel của Linux/Unix..................................................16 1.6.1 Mô hình process/kernel: ..................................................................16 1.6.2 Thi hành một process ......................................................................18 1.6.3 Tái thực thi các process ...................................................................18 1.6.4 Không gian địa chỉ các tiến trình: ...................................................20 1.6.5 Sự đồng bộ hóa và những vùng then chốt:......................................21 1.6.6 Việc giao tiếp tín hiệu và liên tiến trình..........................................22 1.6.7 Quản lí tiến trình: ............................................................................23 1.6.8 Quản lý bộ nhớ ................................................................................25 1.6.9 Device Drivers.................................................................................28 Chương 2 Thiết kế một hệ thống Linux nhúng ...............................................30 2.1 Phần cứng hỗ trợ..................................................................................30 2.1.1 Kiến trúc CPU .................................................................................30 U 2.1.2 Bus và các chuẩn giao tiếp ..............................................................31 2.1.3 Các thiết bị lưu trữ...........................................................................31 2.1.4 Kết nối mạng ...................................................................................32 2.2 Các công cụ phát triển .........................................................................33 2.3 Chọn lựa và biên dịch Linux kernel ....................................................34 2.3.1 MontaVista Linux ...........................................................................37 2.3.2 uClinux ............................................................................................38 2.3.3 Cấu hình kernel ...............................................................................38 2.4 Xây dựng hệ thống thư mục gốc (root filesystem)..............................40 2.4.1 Hệ thống tập tin (File Systems).......................................................40 2.4.2 Các thư mục trên Linux...................................................................40 Chương 3 Kit XUPV2P và gói phần mềm phát triển của Xilinx ....................44 3.1 Kiến trúc phần cứng của Kit XUPV2P................................................44 3.1.1 Tổng quan........................................................................................44 3.1.2 Khối FPGA Virtex II Pro ................................................................46 3.1.3 System ACE ....................................................................................47 3.1.4 Ethernet adaptor ..............................................................................58 3.1.5 Cấu trúc MicroBlaze .......................................................................69 3.1.6 PowerPC..........................................................................................78 3.2 Các gói phần mềm phát triển của Xilinx .............................................85 3.2.1 Xilinx EDK......................................................................................86 3.2.2 BSB Winzard (Base System Builder) .............................................86 Chương 4 Thiết kế hệ thống nhúng dùng Linux..............................................88 4.1 Những công cụ thực hiện.....................................................................88 4.1.1 Hardware .........................................................................................88 4.1.2 Software...........................................................................................88 4.2 Kiểm tra kit XUPV2P..........................................................................89 4.3 Thiết kế phần cứng cho hệ thống với Xilinx BSB ..............................90 4.3.1 Cấu hình sử dụng bộ xử lý PowerPC ..............................................90 4.3.2 Cấu hình các thiết bị ngoại vi..........................................................93 4.3.3 Cấu hình phần mềm.........................................................................96 4.4 Thiết lập môi trường biên dịch chéo....................................................98 4.5 Biên dịch nhân MontaVista Linux trên kiến trúc PowerPC405........100 4.5.1 Tải kernel source và chuẩn bị driver .............................................100 4.5.2 Cấu hình nhân................................................................................102 4.5.3 Tạo ACE file cấu hình cho FPGA và nạp ảnh kernel ...................105 4.5.4 Quá trình khởi động Linux trên kit XUPV2P ...............................107 4.6 Xây dựng cấu trúc thư mục gốc cho hệ điều hành ............................108 Chương 5 Lập trình ứng dụng Server chạy trên hệ thống nhúng và Client trên Windows................................................................................................112 5.1 Mô tả hệ thống file server của uClinux .............................................112 5.2 Cấu trúc lập trình: ..............................................................................113 5.3 Lưu đồ thiết kế:..................................................................................114 5.4 Chương trình File Client MP3 trên Visual C++ MFC: .....................115 5.4.1 Giới thiệu :.....................................................................................115 5.4.2 Chương trình File Client MP3: .....................................................116 5.4.3 Giao diện File Client MP3: .............Error! Bookmark not defined. Chương 6 Giới hạn của đề tài và hướng phát triển trong tương lai...............118 6.1 Tổng kết những phần đã thực hiện ....................................................118 6.2 Giới hạn .............................................................................................118 6.3 Hướng phát triển trong tương lai .......................................................118 Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Chương 1 Linux trên hệ thống nhúng 1.1 Khái niệm cơ bản Linux là một từ thay thế cho nhân Linux, một hệ thống Linux hay một bản phân phối Linux (Linux distribution). Khái niệm về Linux cũng có thể hiểu đơn giản là một hệ điều hành. Chính xác thì Linux dùng để chỉ hạt nhân được Linus Tovalds phát triển và duy trì. Mã nền tảng này chỉ bao gồm hạt nhân và không có một ứng dụng kèm theo khác. Hạt nhân chỉ cung cấp cho phần lõi của hệ thống khả năng quản lý phần cứng dễ dàng. Nó không phải là phần mềm đầu tiên được hệ thống thực thi, vì thực chất là bootloader sẽ được thực thi trước. Tuy nhiên, một khi hạt nhân được thực thi, nó sẽ không bao giờ thoát hay trao quyền điều khiển cả hệ thống cho đến khi hệ thống tắt. Nó có tác dụng điều khiển tất cả phần cứng và cung cấp những khả năng quản lý ở cấp độ logic cao, ví dụ như các tiến trình, sockets, tập tin và các ứng dụng khác chạy trên hệ thống. Linux cũng có thể dùng để thiết kế chuyên biệt cho một hệ thống phần cứng cùng với nhiều ứng dụng khác. Một nhóm phát triển thường đề cập đến vấn đề họ sử dụng Linux trong các sản phẩm mới của họ, họ muốn nói đến không chỉ là hạt nhân Linux mà còn kèm theo các ứng dụng trên sản phẩm mới này. Điều này có ý nghĩa chỉ một hệ thống Linux ngoài hạt nhân còn kèm theo một số lượng lớn các phần mềm cùng chạy với hạt nhân. Thông thường là các phần mềm GNU, các thư viện C và các tập tin nhị phân của ứng dụng . Cũng có thể bao gồm cả giao diện đồ họa và khả năng đáp ứng real-time. Hệ thống Linux có thể xây dựng theo tùy thích, hoặc có thể dựa vào các gói phân phối của các nhà cung cấp. Nhóm phát triển nào đó có thể xây dựng một hệ thống theo ý thích của họ, và ngược lại, bạn có thể dùng các phiên bản có giao diện đổ họa và các tiện ích tiện lợi khác như gói Red Hat, Debian hay Fedora Core. Những hệ thống Linux có nhiều mục đích sử dụng khác nhau, chạy những ứng dụng khác nhau SVTH: Trần Quang Thuận – Phan Bá Minh. - 7 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. ngoại trừ phần hạt nhân có tác dụng không hề thay đổi trên các hệ thống. Các phân phối như Red Hat, Mandrake, SuSE, Debian, Slackware, Caldera, MontaVista, Embedix, BlueCat, PeeWeeLinux, và các phân phối Linux khác có thể khác nhau về kích thước, giá cả, mục đích sử dụng nhưng lại có một điểm chung nhất: cung cấp cho người dùng tập hợp file và những cách thức cài đặt để người dùng xây dựng hạt nhân cùng các ứng dụng khác trên nhiều loại phần cứng tùy theo mục đích xác định. Cách thức cài đặt có thể hoàn toàn tự động hoặc từng bước chi tiết trong tài liệu được cung cấp tùy theo người dùng thông thường hay các nhà phát triển hệ thống. 1.2 Hệ điều hành Linux nhúng (Embedded Linux) Thông thường bạn sẽ sử dụng một phiên bản Linux chính thức được cung cấp bởi những hãng cung cấp phần mềm cho hệ thống của bạn. Nhưng đôi khi, bạn lại muốn dùng một gói Linux được thiết kế với hạt nhân phù hợp với thiết bị đặc biệt hoặc chỉ hỗ trợ chuyên biệt cho một ứng dụng nào đó. Các gói Linux cung cấp rất nhiều nhân khác nhau, ví dụ như các nhân Linux thông thường không được tối ưu và kèm các bản vá để hỗ trợ khả năng chạy các công cụ debug, chẵng hạn như công cụ debug cho nhân. Điểm khác biệt chủ yếu là các nhân dùng cho hệ thống nhúng khác với dùng cho các máy tính (workstation) hay máy phục vụ (server) ở cách cấu hình hạt nhân khi biên dịch. Thuật ngữ “hệ thống Linux nhúng” chỉ những hệ thống nhúng dựa trên nhân Linux và bao hàm cả ý nghĩa sử dụng những thư viện đặc biệt và các công cụ người dùng cùng với hạt nhân. Một gói cung cấp hệ điều hành Linux nhúng cũng có thể bao gồm cả nhóm các gói công cụ phát triển (development framework), hoặc nhóm các phần mềm được thay đổi để có thể sử dụng trên hệ thống nhúng hoặc cả hai. Nhóm các gói công cụ phát triển bao gồm các phần mềm phục vụ cho việc dễ dàng phát triển trên hệ thống nhúng. Như các trình duyệt mã nguồn (source browser), các bộ biên dịch chéo, sửa lỗi, phần mềm quản lý dự án, tạo boot image…Gói công cụ phát triển này sẽ được cài đặt trên máy host. Ngược lại, đối với nhóm các phần mềm ứng dụng trên hệ thống nhúng sẽ được thực thi trên target là các hệ thống nhúng, như các thư viện đặc biệt, các tập tin thực thi và các tập tin cấu hình, với giải pháp tổng SVTH: Trần Quang Thuận – Phan Bá Minh. - 8 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. quát thì nó cũng sẽ bao gồm cả công cụ tạo ra cấu trúc thư mục gốc cho hệ thống (root filesystem). Như vậy đến đây chúng ta có 2 khái niệm host và target. Host sẽ dùng để chỉ máy tính phát triển cho hệ thống nhúng, và target để chỉ các hệ thống nhúng. Hình 1-1: Khái niệm host và target 1.3 Real-time Linux Ban đầu, real-time Linux dùng để chỉ dự án RTLinux đưa ra vào năm 1996 của Michael Barabanov dưới dự giám sát của Victor Yodaiken. Dự án nhằm cung cấp khả năng đáp ứng thời gian chính xác trong môi trường Linux. Tuy nhiên, ngày nay có rất nhiều dự án cung cấp khả năng đáp ứng real-time trong môi trường hệ điều hành Linux. RTAI, Kurt hay Linux/RK đều cung cấp khả năng real-time. Một số dự án cải tiến khả năng real-time bằng cách thêm một hạt nhân thứ 2 vào trong hạt nhân Linux, một số khác cải thiện bằng các bản vá tối ưu hơn. Các khái niệm về real-time có vẻ khó hiểu nhưng chúng ta cũng có thể hiểu đơn giản hơn, đó là những hệ thống đảm bảo có thể hoạt động và đáp ứng gần như tức thời và có độ tin cậy cao. Như các hệ thống audio stream hay các máy trong công nghiệp, đặc biệt chú trọng những đáp ứng về thời gian. Chúng ta sẽ hiểu thêm khi đi vào phân loại các hệ thống Linux nhúng. 1.4 Phân loại hệ thống Linux nhúng Những hệ thống nhúng nào có thể sử dụng Linux? Vì sao lại chọn Linux? Những vấn đề quan trọng nào phát sinh khi sử dụng Linux trên hệ thống nhúng? Hay có bao nhiêu người thực sự dùng Linux trên hệ thống nhúng của họ? Và dùng như thế nào? Có lẽ còn rất nhiều câu hỏi khác phát sinh khi làm quen với Linux trên hệ thống nhúng. Đây có lẽ là những câu hỏi khó trả lời ở thời điểm này, phần này sẽ cố gắng giúp bạn có cái nhìn tổng quát và phần nào tìm được câu trả lời. SVTH: Trần Quang Thuận – Phan Bá Minh. - 9 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Chúng ta có thể thấy đơn giản nhất là các thiết bị mạng thông dụng, như các router hay máy in mạng cho phép người dùng cấu hình thông qua web-base. Chúng đều được tích hợp một nhân Linux để có thể thực hiện những công việc đó. Nếu xem xét thì trong rất nhiều lĩnh vực đều có sự hiện diện của Linux nhúng. Ở đây chúng ta sẽ điểm qua bằng cách phân loại các hệ thống linux nhúng theo các tiêu chí: kích thước, khả năng đáp ứng thời gian, kết nối và khả năng tương tác với bên ngoài. 1.4.1 Kích thước Kích thước của các hệ thống Linux nhúng được xác định ở nhiều phương diện khác nhau. Đầu tiên là kích thước thực bên ngoài đến những đơn vị kích thước của máy tính như tốc độ CPU, dung lượng RAM và lưu trữ. Điều đáng chú ý ở đây là Linux không thể chạy trên các hệ thống 16-bit1, nếu so sánh với các thiết bị nhúng truyền thống thì hệ thống Linux nhúng có thể được coi là những hệ thống lớn. Đối với những hệ thống nhỏ sử dụng những CPU tốc độ thấp, với chỉ khoảng 2MB ROM và 4MB RAM. Điều này không có nghĩa là Linux không thể chạy với dung lượng RAM thấp hơn, nhưng sẽ khó thực hiện. Hiện tại vẫn có những phân phối Linux chỉ cần lưu trữ trên duy nhất một đĩa mềm. Những hệ thống trung bình được tích hợp các CPU có tốc độ tương đối và dùng khoảng 32MB ROM và 64MB RAM. Hầu hết những sản phẩm tiêu dùng đều nằm ở kích thước này. Như các máy PDA, máy chơi MP3 hay các hệ thống giải trí, thiết bị mạng. Một số thiết bị còn có khả năng mở rộng lưu trữ trên các thẻ nhớ, CompactFlash card, thậm chí cả đĩa cứng thông thường. Các hệ thống lớn sử dụng bộ xử lý mạnh hoặc đa bộ xử lý, kết hợp với dung lượng RAM và dung lượng lưu trữ lớn. Thông thường các hệ thống này được sử dụng trong những môi trường cần xử lý khối lượng lớn các phép tính để thực hiện các tác vụ chuyên biệt. Hệ thống chuyển mạch trong thông tin thoại, hay việc giả lập bay. Các hệ 1 Nói Linux không thể chạy trên hệ thống 16-bit không hoàn toàn chính xác, đã từng có dự án Embeddable Linux Kernel Subset (ELKS), chạy Linux trên các hệ thống xử lý cũ như Intel 8086 hay 268. Nhưng với sự phát triển hiện nay thì Linux trên các hệ thống cũ là giải pháp không hề khả thi. SVTH: Trần Quang Thuận – Phan Bá Minh. - 10 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. thống này đặt chức năng lên hàng đầu và các yếu tố kích thước, giá thành và độ phức tạp chỉ là thứ yếu. 1.4.2 Khả năng đáp ứng theo thời gian Có hai mức độ đáp ứng theo thời gian cho hệ thống nhúng: nghiêm ngặt và thông thường. Đối với hệ thống đòi hỏi đáp ứng nghiêm ngặt về thời gian, nó phải phản ứng lại trong một thời gian xác định đưa ra, nếu không thì sẽ có những hậu quả nghiêm trọng xảy ra. Giả sử trong một nhà máy, các công nhân giữ những vật liệu cần được cắt bằng các máy cắt tự động. Vì lý do an toàn, các cảm biến quang được đặt xung quanh các lưỡi dao của máy cắt để nhận dạng màu sắc găng tay của những công nhân. Khi hệ thống báo tay của người công nhân đang trong vùng nguy hiểm, lập tức các lưỡi dao phải ngừng hoạt động để bảo đảm an toàn. Hệ thống này không thể làm tác vụ nào khác để giải phóng tài nguyên bộ xử lý. Đây là một hệ thống đòi hỏi đáp ứng cực kỳ nghiêm ngặt về thời gian và độ tin cậy. Các hệ thống audio cũng phải có đáp ứng thời gian nghiêm ngặt, những đoạn âm thanh trễ chỉ trong nhất thời có thể làm người dùng rất khó chịu. Tuy nhiên hệ thống này cũng cần đáp ứng thời gian chính xác nhưng mức độ không quan trọng như ở ví dụ trên. Các hệ thống đáp ứng thời gian thông thường có rất nhiều ứng dụng nhất là trong những ứng dụng mà vấn đề thời gian không quan trọng. Ví dụ như hệ thống trả lời tự động cần đến 10 giây để chuyển đổi, hay các máy PDA cũng cần một thời gian chờ để khởi động. 1.4.3 Khả năng kết nối Khả năng kết nối để chỉ các hệ thống có thể kết nối đến các thiết bị mạng khác. Ngày nay chúng ta muốn mọi thứ có thể truy cập thông qua hệ thống mạng. Vì vậy, để có khả năng đáp ứng điều này, những yêu cầu cơ bản cho một hệ thống dần được xây dựng thêm. Một trong những nhân tố khiến mọi người chọn Linux làm hệ điều hành cho hệ thống nhúng của họ, chính là ở khả năng kết nối của Linux. Giảm giá thành và những thành phần đã chuẩn hóa của Linux càng khiến mọi người sử dụng nó. Đơn giản như việc bạn có thể gắn một thiết bị kết nối không dây vào máy Compaq iPAD bằng cách cắm một PCMCIA (Personal Computer Memory Card International Association) vào khe cắm của máy, nó có thể sử dụng ngay lập tức. SVTH: Trần Quang Thuận – Phan Bá Minh. - 11 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. 1.4.4 Khả năng tương tác với người dùng Mức độ tương tác với người dùng tùy theo từng hệ thống, Một số hệ thống như các máy PDA tập trung vào các tính năng giao tiếp với người sử dụng bằng các màn hình cảm ứng. Trong khi các hệ thống điều khiển công nghiệp khác chỉ cần các LED hiển thị và các nút nhấn để giao tiếp với người dùng, còn có những hệ thống không hề có giao tiếp nào cả, như một số thành phần của hệ thống tự lái trên các máy bay, chỉ đơn thuần điều khiển an toàn cho cánh mà không cần giao tiếp với phi công. Hệ thống Lĩnh vực Kích thước Đáp ứng thời gian Kết nối Mức độ giao tiếp với người dùng Xe tự hành Không gian Lớn Nghiêm ngặt Có Cao Thiết bị trợ lý số Tiêu dùng Nhỏ Thông thường Không Rất cao Bộ định tuyến (router) Mạng Nhỏ Thông thường Có Thấp Bảng 1-1: Các đặc điểm của hệ thống 1.5 Kiến trúc tổng quát của một hệ thống Linux nhúng Để có thể giải thích đơn giản, chúng ta sẽ xem xét một hệ thống điều khiển các tiến trình công nghiệp. Nó được thiết kế từ các máy tính kết nối mạng và tất cả đều sử dụng Linux. Hình 1-2 thể hiện các khối đơn giản Hình 1-2: Một kiến trúc ví dụ điển hình Bên trong hệ thống, được xây dựng từ 4 thành phần khác nhau, mỗi thành phần phục vụ cho một mục đích khác nhau: Data acquition (DAQ), Control, System Management (SYSM) và User interface (UI). Kết nối bên trong giữa các thành phần sử SVTH: Trần Quang Thuận – Phan Bá Minh. - 12 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. dụng các giao tiếp và các giao thức rất phổ biến TCP/IP trên Ethenet. Khối DAQ và Control được cài đặt trên một đường truyền riêng, các UI cũng như vậy. Để có thể giao tiếp với bên ngoài, khối SYSM có một kết nối với hệ thống mạng bên ngoài. Để điều khiển một tiến trình, hệ thống luôn cần biết trạng thái của các tiến trình trong các thành phần khác nhau. Lấy dữ liệu để làm gì, khi có dữ liệu, hệ thống có thể biết được làm thế nào để quản lý tiến trình. Mọi lệnh điều khiển đều xuất phát từ khối Control. Chi tiết về những tiến trình đang được điều khiển cần phải tương tác hoặc hiển thị với người dùng, cũng phải có sự giao tiếp để vận hành những tiến trình này theo ý muốn, điều này được thực hiện từ các khối UI. Để kết hợp tất cả những khối rời rạc này, tập trung chỗ chứa các dữ liệu và quản lý các interface, khối SYSM được đặt ở trung tâm đồng thời cho phép kết nối ra mạng bên ngoài. Chúng ta sẽ đi sâu vào từng khối để tìm hiểu chi tiết hơn. 1.5.1 Khối Data Acquisition Thành phần đầu tiên của quá trình đo lường là các bộ chuyển đổi. Các bộ chuyển đổi là những thiết bị biển đổi các hiện tượng vật lý thành một tín hiệu điện. Các bộ chuyển đổi này thường đặt trực tiếp ở những nơi cần theo dõi. Các tín hiệu điện sinh ra từ các bộ chuyển đổi thường được khuyếch đại, lọc và cách ly trước khi đi vào thiết bị DAQ cuối cùng.Thiết bị này thường là các DAQ card gắn vào máy tính để lấy mẫu các tín hiệu tương tự, chuyển thành các giá trị số và lưu trữ trên các bộ đệm. Dữ liệu số này có thể dùng để xác định các điều kiện hoặc thay đổi các thông số đáp ứng cho tín hiệu, phản hồi lại khi nhận được tín hiệu. Khối DAQ lưu trữ các dữ liệu nhận được trên các bộ đệm, tiến hành phân tích trên các dữ liệu này hoặc có thể chuyển đến khối SYSM. Trong mọi trường hợp, những dữ liệu quan trọng sẽ được chuyển tiếp đến khối SYSM để lưu trữ và hiển thị trên các UI. Nếu các dữ liệu được phân tích trong khối DAQ, khối này sẽ thông báo cho khối SYSM nếu như phát hiện những tình huống bất thường hay nguy hiểm, ngược lại khối DAQ sẽ nhận lệnh từ khối SYSM. Những lệnh này có thể là việc thay đổi tần số lấy mẫu, các thông số phân tích hoặc công việc của DAQ sẽ làm gì khi phân tích dữ liệu xong. Đối với khối SYSM khi được DAQ thông báo, DAQ sẽ chuyển tiếp thông báo trạng thái hoặc lỗi đến khối SYSM. SVTH: Trần Quang Thuận – Phan Bá Minh. - 13 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Khối DAQ thường khởi động từ flash trên khối và sử dụng RAM. Vì vậy nó dễ dàng thay đổi nếu như hệ thống bị lỗi. Cấu hình phần mềm bao gồm một hạt nhân được tạo riêng chỉ chạy trên một hệ thống (có thể là máy PC hay một hệ thống dùng PowerPC) Khối DAQ không có giao tiếp với bên ngoài mà chỉ liên lạc với khối SYSM DAQ cũng không phải hệ thống đa người dùng và không có giao tiếp với người dùng. Khối DAQ chỉ cần thực thi một công cụ đo lường nào đó. Cũng giống như gói BusyBox. Địa chị IP của khối DAQ được thiết kế cố định, vì vậy khối SYSM sẽ dễ dàng kiểm tra DAQ còn hoạt động hay không. 1.5.2 Khối Control Điều khiển các tiến trình truyền thống như PLC hay những hệ thống tương tự rất mắc tiền và phải sử dụng những hệ điều hành riêng, đồng thời cũng phải có cách vận hành riêng. Mặc dầu các phần cứng chuẩn công nghiệp cũng bắt đầu giảm giá thành theo xu thế công nghệ. Với mục tiêu giảm giá thành những phần cứng ngày nay trên thị trường tiêu dùng, dễ dàng nhận thấy các máy PC có ưu thế được dùng để quản lý các quy trình. Khối Control là một máy tính chuẩn công nghiệp kết nối với các phần cứng cần được điều khiển. Máy tính này là một hệ thống nhúng kích cỡ trung bình với khả năng đáp ứng nghiêm ngặt về thời gian và không có tương tác người dùng giống như khối DAQ. Nó cũng được nối vào phần còn lại của cả hệ thống lớn qua đường truyền Ethernet. Nhiệm vụ chính của khối Control là phát ra tín hiệu điều khiển phần cứng kết nối với nó, đồng thời theo dõi hoạt động của phần cứng này để điều khiển hợp lý. Các tín hiệu điều khiển xuất phát từ gốc là khối SYSM, là trung tâm đưa ra quyết định, và SYMS sẽ quyết định dựa vào dữ liệu lấy từ khối DAQ. Khối Control sẽ đưa ra lệnh cuối cùng gửi đến cho phần cứng dựa trên quyết định của SYSM và tình trạng của phần cứng. Khi tác vụ điều khiển phần cứng đã hoàn thành, khối Control sẽ gửi một thông báo trạng thái ngược về khối SYSM. Khối Control cũng có thể boot từ flash và sử dụng RAM giống như DAQ, chỉ khác là nó phải sử dụng một nhân Linux có khả năng đáp ứng nghiêm ngặt về thời gian vì phải điều khiển những phần cứng phức tạp. Nó cũng có IP tĩnh và có thể bao gồm gói BusyBox như DAQ. SVTH: Trần Quang Thuận – Phan Bá Minh. - 14 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. 1.5.3 Khối System management Khối SYSM quản lý sự ảnh hưởng qua lại giữa các thành phần khác trong hệ thống. Khối này gồm 3 giao tiếp với khối DAQ, Control và một kết nối ra mạng lưới bên ngoài. SYSM là một hệ thống nhúng lớn có đòi hỏi đáp ứng thời gian nghiêm ngặt và không có tương tác với người dùng. Trên liên kết A (hình 1-2) SYSM nhận dữ liệu từ DAQ lưu trữ một phần dữ liệu này và chuyển tiếp các dữ liệu thích hợp đến khối UI để tương tác với người dùng. Dữ liệu được lưu trữ có thể sử dụng trong tương lai, và từ các dữ liệu này tích lũy những kinh nghiệm cho hệ thống điều khiển. Khối SYSM có thể nhận dữ liệu đã phân tích ở DAQ hoặc bản thân nó cũng có thể thực hiện công việc phân tích. SYSM sẽ đưa ra những lệnh điều khiển khối Control dựa trên dữ liệu đã phân tích và từ đó khối Control sẽ điều khiển phần cứng một cách chi tiết hơn. SYSM thực thi những chương trình nền thực hiện các tác vụ liên lạc giữa DAQ và khối Control. SYSM cũng có IP tĩnh để các khối DAQ và Control có dễ dàng liên lạc với nó. Đối với liên kết ra mạng bên ngoài, khối SYSM cung cấp giao tiếp qua HTTP và SSH. HTTP cung cấp khả năng theo dõi và cấu hình cho cả hệ thống thông qua các trình duyệt web đơn giản. SSH cung cấp khả năng kết nối vào hệ thống nhúng thống từ xa và có tính bảo mật cao để sửa lỗi và nâng cấp hệ thống. Một trong những cấu hình quan trọng của SYSM là cách nó báo hiệu lỗi và không có khả năng xử lý lỗi này. Ví dụ như thông báo bằng âm thanh, hay gửi các tín hiệu đến người vận hành hệ thống hoặc đơn giản là hiển thị thông báo đến các UI. SYSM có thể dùng IP tĩnh hoặc nhận IP từ một DHCP server. Ở liên kết B (hình 1-2) SYSM có thể cung cấp địa chỉ động cho các UI, một khi UI đã kết nối và xác nhân với SYSM, nó sẽ chuyển tiếp các thông báo, trạng thái hệ thống. Người dùng có thể dựa vào đó để vận hành hệ thống. SYSM là một hệ thống nhúng lớn vì vậy nó có thể phải boot từ hard disk và có đầy đủ chức năng như một máy tính truyền thống. Tuy nhiên các chức năng của nó đều rất quan trọng, cần thiết và phải đáp ứng các tác vụ song song. Hơn nữa là trung tâm điều khiển nên phải hỗ trợ môi trường đa người dùng cùng các ứng dụng người dùng. SYSM giống như một server hơn là các máy tính thông thường. SVTH: Trần Quang Thuận – Phan Bá Minh. - 15 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. 1.5.4 Khối User interface UI đơn giản chỉ để tương tác với người dùng để có thể đưa ra quyết định quản lý các tiến trình. UI thường là các hệ thống nhúng nhỏ với đáp ứng thời gian thông thường. Hiển nhiên các khối UI này cũng có khả năng kết nối mạng. Các khối UI thông thường sẽ boot từ bộ nhớ flash hay thông qua mạng. UI được cấu hình sẽ nhận IP từ các DHCP server. Các UI tiện dụng thường phát triển trên dòng ARM hay MIPS và chạy những kernel thông thường. UI cũng không cần đến những công cụ người dùng, các tiện ích đồ họa phức tạp hay các thư viện. 1.6 Tổng quan về kernel của Linux/Unix Kernel cung cấp môi trường cho các ứng dụng hoạt động. Kernel phải thực thi một nhóm các dịch vụ và giao tiếp tương ứng. Mỗi ứng dụng sử dụng giao tiếp riêng và tài nguyên phần cứng dành cho ứng dụng thường không ảnh hưởng trực tiếp lẫn nhau. 1.6.1 Mô hình process/kernel: Một CPU có thể hoạt động trong user mode hoặc kernel mode. Một số CPU có thể có nhiều hơn 2 chế độ hoạt động. Ví dụ, bộ vi xử lý Intel 80x86 có 4 trạng thái hoạt động khác nhau. Nhưng tất cả các kernel chuẩn của Unix chỉ sử dụng Kernel mode và User mode. Khi thực thi một chương trình trong User Mode thì chương trình này không thể trực tiếp truy xuất những cấu trúc dữ liệu của kernel hoặc những chương trình của kernel. Khi một ứng dụng chạy trong Kernel Mode thì những giới hạn này không còn nữa. Mỗi loại CPU cung cấp những lệnh đặc biệt để chuyển từ User Mode sang Kernel Mode và ngược lại. một chương trình chạy phần lớn thời gian ở User Mode và chỉ chuyển sang Kernel Mode khi có yêu cầu một dịch vụ được cung cấp bởi kernel. Khi kernel đã đáp ứng yêu cầu đó của chương trình thì kernel lại đưa chương trình đó trở về trạng thái User Mode. Processes là những quy trình động, có quãng thời gian tồn tại hữu hạn trong hệ thống. Các tác vụ như tạo, loại trừ và đồng bộ những tiến trình đang tồn tại được ủy thác cho một nhóm thường trình trong kernel. SVTH: Trần Quang Thuận – Phan Bá Minh. - 16 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Bản thân kernel không phải là một process nhưng là một process manager. Mô hình process/kernel cho rằng những process yêu cầu một dịch vụ kernel nào đó thì sử dụng cấu trúc lập trình đặc biệt được gọi là lời gọi hệ thống (System call). Mỗi lời gọi hệ thống thiết lập nhóm các thông số cho biết process yêu cầu và sau đó thực thi theo lệnh CPU để chuyển từ User Mode sang Kernel Mode. Bên cạnh những tiến trình của người dùng, hệ thống Unix bao gồm một vài tiến trình đặc quyền được gọi là kernel thread với những đặc điểm: • Tiến trình chạy trong Kernel Mode trong không gian địa chỉ kernel. • Tiến trình không tương tác với người dùng, không cần thiết bị đầu cuối. • Tiến trình thường được tạo ra khi hệ thống khởi động và vẫn còn hoạt động cho đến khi tắt máy. Nên chú ý, trên một hệ thống đơn, chỉ có một tiến trình có thể ở trong User Mode hoặc Kernel Mode. Nếu chạy trong Kernel Mode, bộ vi xử lí sẽ thực thi một số thủ tục của kernel. Hình 1-3 miêu tả một ví dụ về việc chuyển trạng thái giữa User Mode và Kernel Mode. Tiến trình 1 trong User Mode đưa ra một lời gọi hệ thống, sau đó tiến trình này chuyển qua trạng thái Kernel Mode và lời gọi này được phục vụ. Tiến trình này sau đó trở về trạng thái thực thi ở User Mode cho đến khi xảy ra ngắt do timer và lịch trình thực thi được kích hoạt trong trạng thái Kernel Mode. Tiến trình khác được thay thế và tiến trình 2 bắt đầu thực thi trong User Model cho đến khi thiết bị phần cứng phát ra ngắt. Kết quả của ngắt này là tiến trình 2 chuyển sang Kernel Mode và phục vụ cho ngắt này. Hình 1-3: sự chuyển trạng thái giữa User Mode và Kernel Mode SVTH: Trần Quang Thuận – Phan Bá Minh. - 17 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. 1.6.2 Thi hành một process Để kernel có thể quản lý các tiến trình, mỗi tiến trình phải được mô tả bởi bằng process descriptor (bao gồm thông tin về trạng thái hiện tại của tiến trình). Khi kernel ngừng thực thi một tiến trình thì kernel phải lưu lại nội dung hiện tại của những thanh ghi bộ xử lí khác nhau vào process descriptor bao gồm: • Thanh ghi program counter và stack pointer. • Thanh ghi mục đích chung. • Thanh ghi float pointer. • Thanh ghi trạng thái bộ xử lí (Processor Status Word) • Thanh ghi quản lí bộ nhớ dùng để theo dõi việc sử dụng RAM của tiến trình. Khi kernel quyết định tái thực thi một tiến trình, kernel dùng process descriptor tương ứng để nạp vào các thanh ghi CPU. Giá trị lưu lại của program counter trỏ đến sau lệnh được thực hiện cuối cùng thì tiến trình trở lại thực thi từ nơi mà tiến trình bị ngưng. Khi một tiến trình tạm thời không thực thi trên CPU, nó đang đợi một số sự kiện. kernel của Unix gọi từ nhiều trạng thái chờ khác. Việc này kiểm soát bởi hàng đợi của process descriptor. Mỗi hàng đợi tương ứng một tập tiến trình đang chờ một số sự kiện cụ thể nào đó. 1.6.3 Tái thực thi các process Kernel của Unix có tính tái thực thi: nghĩa là trong cùng thời điểm, nhiều tiến trình có thể thực thi trong Kernel Mode. Dĩ nhiên trên những hệ thống đơn vị xử lí chỉ có một tiến trình chạy nhưng nhiều tiến trình có thể bị khóa trong Kernel Mode, đợi tài nguyên CPU hoặc hoàn thành việc nhập xuất. Ví dụ như sau khi đưa ra yêu cầu đọc đĩa, kernel sẽ để bộ điều khiển đĩa xử lí nó và trở về thực thi những tiến trình khác. Một ngắt thông báo cho kernel biết khi thiết bị đã đáp ứng việc đọc này vì vậy có thể trở lại thực thi tiến trình ban đầu. Một phương pháp cung cấp khả năng tái thực thi là viết những hàm chỉ có thể thay đổi các biến cục bổ và không làm thay đổi cấu trúc dữ liệu toàn cục. Các hàm như vậy được gọi là những hàm tái thực thi (Reentrant functions). Nhưng kernel thì không SVTH: Trần Quang Thuận – Phan Bá Minh. - 18 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. bị giới hạn như những hàm tái thực thi.. Thay vì vậy, kernel có thể gồm những hàm không tái thực thi và sử dụng cơ chế khóa để chắc chắn rằng chỉ một tiến trình có thể thi hành hàm không tái thực thi tại một thời điểm. Mỗi tiến trình trong Kernel Mode chỉ hoạt động trên bộ nhớ của nó và không thể gây trở ngại với những tiến trình khác. Nếu ngắt phần cứng xảy ra thì kernel có thể hoãn tiến trình đang chạy hiện tại cho dù tiến trình đó đang ở trong Kernel Mode. Khả năng này có tính chất quan trọng vì nó cải thiện tốc độ của bộ điều khiển thiết bị đã phát sinh ngắt. Khi một thiết bị sinh ngắt, thiết bị đó đợi cho đến khi CPU trả lời. Nếu kernel trả lời một cách nhanh chóng thì bộ điều khiển thiết bị có thể thực hiện những nhiệm vụ khác trong khi CPU xử lí ngắt. Kernel reentrancy ảnh hưởng lên việc tổ chức của kernel. Một kernel control path chỉ rõ trình tự của tập lệnh được thực thi bởi kernel để xử lý một lời gọi hệ thống, một ngoại lệ, hay một ngắt. Trong trường hợp đơn giản nhất, CPU thực thi một kernel control path theo tuần tự từ lệnh đầu tiên đến lệnh cuối cùng. CPU thêm vào những kernel control path khi một trong những sự kiện dưới đây xảy ra: • Một tiến trình đang thực thi trong User Mode gọi một lời gọi hệ thống và kernel control path tương ứng xác định không thể thỏa mãn yêu cầu này ngay, sau đó nó sẽ gọi một lịch trình để chọn một tiến trình mới đưa vào thực thi. Kết quả là việc chuyển trạng thái tiến trình xảy ra. Kernel control path đầu tiên chưa hoàn thành và CPU tái thực thi những kernel control path khác. Trong trường hợp này, hai control path được thực thi với tư cách là 2 tiến trình khác nhau. • CPU phát hiện một ngoại lệ, ví dụ có truy cập đến một page không có trong RAM trong khi đang chạy một kernel control path. Control path đầu tiên bị hoãn lại và CPU bắt đầu thực thi các thủ tục thích hợp. Thủ tục này có thể định vị một page mới cho tiến trình và đọc nội dụng của nó từ đĩa. Khi thủ tục kết thúc, control path đầu tiên được gọi lại. Trong trường hợp này, hai control path được thực thi với tư cách là cùng một tiến trình. SVTH: Trần Quang Thuận – Phan Bá Minh. - 19 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. • Ngắt phần cứng xảy ra trong khi CPU đang chạy một kernel control path với việc ngắt được cho phép. Kernel control path đầu tiên chưa hoàn thành và CPU bắt đầu xử lí kernel control path khác để điều khiển ngắt. kernel control path đầu tiên gọi lại khi bộ điều khiển ngắt kết thúc. Trong trường hợp này hai kernel control path là sự thực thi của cùng một tiến trình và tất cả thời gian thực thi đều được tính là của nó. Tuy nhiên, bộ điều khiển ngắt không cần thiết hoạt động với tư cách một tiến trình. Hình 1-4 minh họa vài ví dụ của việc chèn vào và không chèn vào kernel control path. Xem xét ba trạng thái khác nhau của CPU: • Thực thi một tiến trình trong trạng thái User Mode (User) • Thực thi một ngoại lệ hoặc bộ điều khiển lời gọi hệ thống (Excp). • Thực thi bộ điều khiển ngắt (Intr) Hình 1-4: Việc chèn kernel control path 1.6.4 Không gian địa chỉ các tiến trình: Mỗi tiến trình chạy trong không gian địa chỉ riêng của nó. Một tiến trình chạy trong trạng thái User Mode sử dụng vùng stack, dữ liệu và code riêng. Khi chạy trong Kernel Mode, tiến trình lại định vị địa chỉ vùng kernel data, vùng code và sử dụng vùng stack khác. Vì kernel có tính tái thực thi, những kernel control path khác nhau – mỗi cái liên quan đến một tiến trình khác nhau có thể được thực thi lần lượt. Trong trường hợp này, mỗi kernel control path qui cho vùng stack kernel riêng. Mỗi tiến trình khi thực thi truy cập vào không gian địa chỉ riêng, đôi khi một phần của không gian địa chỉ được chia sẻ giữa các tiến trình. Trong một số trường hợp sự chia sẻ này được yêu cầu bởi các tiến trình, một số khác thì được thực hiện tự động bởi kernel để giảm bớt việc sử dụng bộ nhớ. SVTH: Trần Quang Thuận – Phan Bá Minh. - 20 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Nếu nhiều user cần dùng cùng một chương trình cùng lúc thì chỉ nạp chương trình vào bộ nhớ một lần và những lệnh đó có thể được chia sẻ bởi tất cả các user nào cần nó. Dữ liệu dĩ nhiên không được chia sẻ bởi vì mỗi user có những dữ liệu riêng biệt. Kiểu chia sẻ không gian địa chỉ được thực hiện một cách tự động bởi kernel để tiết kiệm bộ nhớ. Những tiến trình cũng chia sẻ một phần không gian bộ nhớ là loại giao tiếp giữa các tiến trình với nhau sử dụng kĩ thuật bộ nhớ chia sẻ được giới thiệu trong System V và được hỗ trợ bởi Linux. Cuối cùng, Linux hỗ trợ lời gọi hệ thống mmap(), là lời gọi cho phép một phần của tập tin hay bộ nhớ trên một thiết bị được ánh xạ là một phần của không gian địa chỉ tiến trình. Việc ánh xạ bộ nhớ cung cấp sự lựa chọn đọc và ghi thông thường cho việc truyền dữ liệu. nếu nhiều tiến trình khác nhau cũng chia sẻ một tập tin thì không gian địa chỉ của mỗi tiến trình mà chia sẻ tập tin sẽ bao gồm việc ánh xạ bộ nhớ. 1.6.5 Sự đồng bộ hóa và những vùng then chốt: Thi hành một reentrant kernel cần thiết sự đồng bộ hóa: nếu một kernel control path bị hoãn trong khi tác động lên cấu trúc dữ liệu của kernel thì không một kernel control path nào sẽ được cho phép tác động lên cấu trúc dữ liệu này trừ khi nó được xác lập lại một trạng thái nhất định nào đó. Nếu không thì việc ảnh hưởng của hai control path có thể làm hỏng thông tin được lưu trữ. Ví dụ, giả sử có một biến toàn cục V chứa số mục tin có sẵn của tài nguyên hệ thống. Kernel control path A đầu tiên đọc biến và quyết định rằng chỉ có một mục tin có sẵn. tại thời điểm đó, một kernel control path B khác được kích hoạt và cũng đọc biến này, biến này vẫn chứa giá trị 1. Do đó B giảm một giá trị V và bắt đầu sử dụng mục tin tài nguyên này. Sau đó A trở lại sự thực thi; bởi vì nó đã đọc giá trị của V rồi, A cho rằng A có thể giảm V và lấy mục tin tài nguyên mà B đã sử dụng rồi. Kết quả cuối cùng V chứa -1, và hai kernel control path đang sử dùng cùng mục tin tài nguyên với sai sót tiềm tàng. Trong ví dụ trước, việc hỏng dữ liệu sẽ không xảy ra nếu hai control path đọc và giảm V với quá trình hoạt động đơn lẻ, không gián đoạn. Tuy nhiên kernel bao gồm rất nhiều cấu trúc dữ liệu mà không thể truy xuất chỉ bằng một hành động đơn lẻ. Ví SVTH: Trần Quang Thuận – Phan Bá Minh. - 21 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. dụ, không thể gỡ bỏ một phần tử từ một danh sách liên kết bằng một hành động đơn lẻ, bởi vì kernel cần truy xuất ít nhất hai con trỏ cùng một lúc. Bất cứ đoạn code cần phải được hoàn thành trước tiến trình khác bắt đầu được gọi là vùng then chốt (Critical region). Những vấn đề xảy ra không những giữa các kernel control path mà còn giữa các tiến trình chia sẻ dữ liệu chung. Những kĩ thuật đồng bộ hóa khác nhau vẫn được chấp nhận. 1.6.6 Việc giao tiếp tín hiệu và liên tiến trình Tín hiệu Linux/Unix cung cấp cơ chế để thông báo những tiến trình của những sự kiện trong hệ thống. Mỗi sự kiện có số tín hiệu của riêng nó ví dụ như SIGTERM. Có 2 loại sự kiện hệ thống: Thông báo bất đồng bộ: ví dụ, một người dùng có thể gửi tín hiệu ngắt SIGTERM đến một tiến trình bằng cách nhấn mã phím ngắt (thường là CTRL-C) ở thiết bị đầu cuối. Những ngoại lệ hay lỗi đồng bộ: ví dụ, kernel gửi tín hiệu SIGSEGV đến một tiến trình khi nó truy xuất vị trí bộ nhớ ở địa chỉ không hợp lệ. Chuẩn POSIX định nghĩa khoảng 20 tín hiệu khác nhau, hai trong số đó là người dùng định nghĩa và có thể được sử dụng như là cơ chế ban đầu cho việc giao tiếp và đồng bộ giữa các tiến trình trong User Mode. Nhìn chung, một tiến trình phải phản ứng lại tín hiệu thu nhận bằng hai cách: • Lờ đi tín hiệu. • Không đồng bộ thực thi một thủ tục riêng biệt (bộ điều khiển tín hiệu). Nếu tiến trình không định rõ một trong những tùy chọn này, kernel sẽ thực hiện hành động mặc định dựa trên số tín hiệu. Năm hành động mặc định có thể có là: • Kết thúc tiến trình • Ghi nội dung thực thi và nội dung của không gian địa chỉ vào tập tin (core dump) và kết thúc tiến trình. • Lờ đi tín hiệu. • Hoãn tiến trình. • Gọi lại sự thực thi của tiến trình nếu nó bị ngưng. SVTH: Trần Quang Thuận – Phan Bá Minh. - 22 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Xử lí tín hiệu kernel khá phức tạp vì POSIX cho phép những tiến trình ngăn tín hiệu tạm thời. Hơn nữa, một vài tín hiệu như SIGKILL không thể xử lí trực tiếp bởi tiến trình và không thể phớt lờ. Chia sẻ bộ nhớ cung cấp cách nhanh nhất cho những tiến trình trao đổi và chia sẻ dữ liệu. một tiến trình bắt đầu bằng cách đưa ra một lời gọi hệ thống shmget() để tạo bộ nhớ chia sẻ mới có kích thước theo yêu cầu. Sau khi có được định danh tài nguyên IPC, tiến trình này triệu gọi lời gọi hệ thống shmat()sẽ trả về địa chỉ bắt đầu của vùng mới trong không gian địa chỉ tiến trình. Khi tiến trình muốn gỡ bỏ bộ nhớ chia sẻ từ không gian địa chỉ của nó, nó gọi shmdt(). Sự thi hành chia sẻ bộ nhớ dựa trên việc kernel thực thi không gian địa chỉ tiến trình như thế nào. 1.6.7 Quản lí tiến trình: Linux/Unix phân biệt rõ ràng giữa tiến trình và chương trình nó đang thực thi. Để kết thúc, lần lượt sử dụng lời gọi hệ thống fork() và exit() để tạo một tiến trình mới và kết thúc nó, trong khi gọi exec() để nạp một chương trình mới. Sau đó thực thi lời gọi hệ thống, tiến trình trở về thực thi với một không gian địa chỉ hoàn toàn mới chứa chương trình đã nạp. Tiến trình gọi fork() là tiến trình cha (parent) trong khi tiến trình mới là tiến trình con (child). Parent và child có thể tương tác với nhau vì cấu trúc dữ liệu mô tả mỗi tiến trình bao gồm một con trỏ chỉ đến parent và những con trỏ chỉ đến child ngay. Lời gọi hệ thống exit() kết thúc tiến trình. Kernel xử lí lời gọi hệ thống bằng cách giải phóng các tài nguyên mà tiến trình làm chủ và gửi tiến trình parent một tín hiệu SIGCHLD tín hiệu này mặc định bị lờ đi. 1.6.7.1 Zombie process Làm cách nào một tiến trình parent biết thông tin kết thúc của children? Lời gọi hệ thống wait() cho phép một tiến trình đợi cho đến khi một trong những children của nó kết thúc, nó trả về định danh tiến trình (PID) của child đã kết thúc. Khi thực thi lời gọi hệ thống này, kernel kiểm tra một child đã kết thúc hay chưa. Trạng thái tiến trình đặc biệt zombie được giới thiệu để đại diện cho những tiến trình đã kết thúc: một tiến trình còn trong trạng thái đó cho đến khi tiến trình parent của nó thực thi một lời gọi hệ thống wait() lên nó. Bộ xử lý lời gọi hệ thống trích một SVTH: Trần Quang Thuận – Phan Bá Minh. - 23 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. số dữ liệu về việc sử dụng tài nguyên từ những trường miêu tả tiến trình, sinh ra một mô tả tiến trình khi dữ liệu được thu thập. Nếu không có tiến trình child nào đã kết thúc khi lời gọi hệ thống wait() được thi hành thì kernel thường đặt tiến trình trong trạng thái chờ cho đến khi một child nào đó kết thúc. Nhiều kernel cũng thực thi lời gọi hệ thống waitpid() cho phép một tiến trình đợi một tiến trình child cụ thể. Kernel giữ thông tin trên tiến trình của child cho đến khi parent cấp phát lời gọi wait(), nhưng giả sử tiến trình của parent kết thúc mà không gọi wait()? Thông tin quan trọng lấy ở bộ nhớ có thể được sử dụng để phục vụ cho những tiến trình đang hoạt động. Ví dụ, nhiều shell cho phép user thực hiện lệnh ở background rồi sau đó log out. Tiến trình đang chạy trên shell kết thúc, nhưng children của nó vẫn tiếp tục hoạt động. Giải pháp dựa vào tiến trình hệ thống đặc biệt được gọi là init được tạo ra trong suốt việc khởi tạo hệ thống. Khi một tiến trình kết thúc, kernel thay đổi con trỏ mô tả tiến trình thích hợp của tất cả children đang tồn tại của tiến trình đã kết thúc để làm chúng trở thành children của init. Tiến trình này theo dõi sự thực thi của tất cả children của nó và thông thường cấp phát lời gọi hệ thống wait(),điều đó có nghĩa là tống khứ tất cả các zombie. 1.6.7.2 Nhóm tiến trình và phiên đăng nhập: Những hệ điều hành Unix mới giới thiệu khái niệm của process group để trình bày khái niệm “job”. Ví dụ, để thực thi câu lệnh $ ls | sort | more Shell phải hỗ trợ tiến trình nhóm như là bash, tạo một nhóm mới cho ba tiến trình tương ứng với ls, sort và more. Shell đóng vai trò trên ba tiến trình như thể chúng là những thực thể đơn lẻ. Mỗi bộ mô tả tiến trình bào gồm một trường process group ID. Mỗi nhóm của các tiến trình có một group leader là tiến trình có PID trùng với process group ID. Một tiến trình được tạo mới thì được chèn vào nhóm tiến trình của parent của nó. Kernel Unix cũng giới thiệu phiên đăng nhập. Một phiên đăng nhập chứa tất cả tiết trình con của tiến trình bắt đầu một phiên làm việc trên terminal. Tất cả tiến trình trong một nhóm tiến trình phải cùng phiên đăng nhập. Một phiên đăng nhập có nhiều nhóm tiến trình đang hoạt động cùng lúc, một trong những nhóm tiến trình này luôn SVTH: Trần Quang Thuận – Phan Bá Minh. - 24 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. luôn trong foreground, nghĩa là nó truy xuất terminal. Những nhóm tiến trình đang hoạt động khác ở background. Khi một tiến trình background cố gắng truy xuất terminal, nó nhận một tín hiệu SIGTTIN hay SIGTTOUT. Trong nhiều câu lệnh shell, sử dụng lệnh nội trú bg và fg để đặt nhóm tiến trình hoặc là ở background hay ở foreground. 1.6.8 Quản lý bộ nhớ 1.6.8.1 Bộ nhớ ảo Tất cả các hệ thống Linux gần đây cung cấp khái niệm hữu ích được gọi là bộ nhớ ảo. Bộ nhớ ảo đóng vai trò như là tầng logic giữa yêu cầu bộ nhớ ứng dụng và đơn vị quản lí bộ nhớ (MMU) phần cứng. Bộ nhớ ảo có rất nhiều mục đích và ưu điểm: • Những tiến trình khác nhau có thể được thực thi đồng thời. • Có thể chạy những ứng dụng mà nhu cầu bộ nhớ lớn hơn bộ nhớ vật lí. • Tiến trình có thể chạy một chương trình mà có code chỉ được nạp một phần vào bộ nhớ. • Cho phép mỗi tiến trình truy xuất tập hợp con của bộ nhớ vật lí có sẵn. • Những tiến trình chia sẻ ảnh bộ nhớ đơn của một thư viện hay chương trình. • Có thể đặt lại vị trí cho những chương trình ở bất cứ vị trí nào trong bộ nhớ vật lý. • Người lập trình viết code độc lập với máy vì họ không cần hiểu biến nhiều về tổ chức bộ nhớ vật lý Thành phần chính của hệ thống bộ nhớ ảo là khái niệm không gian bộ nhớ ảo. Các tham chiếu bộ nhớ mà một tiến trình có thể sử dụng khác với địa chỉ bộ nhớ vật lý. Khi một tiến trình sử dụng địa chỉ ảo, kernel và MMU hợp tác định vị địa chỉ vật lí của bộ nhớ được yêu cầu. Các CPU ngày nay bao gồm cả mạch phần cứng tự động dịch địa chỉ ảo thành địa chỉ vật lý. Chia RAM thành nhiều page 4KB hay 8 KB và các page table chi tiết để xác định rõ sự tương ứng giữa địa chỉ ảo và địa chỉ vật lý. Những mạch này làm cho việc định vị bộ nhớ đơn giản hơn bởi vì mỗi yêu cầu cần một khối địa chỉ ảo liên tiếp SVTH: Trần Quang Thuận – Phan Bá Minh. - 25 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. nhau có thể được đáp ứng bằng cách cấp phát một nhóm page có địa chỉ vật lí không liên tục. 1.6.8.2 Sử dụng bộ nhớ truy xuất ngẫu nhiên Tất cả hệ điều hành Unix phân biệt rõ thành hai phần của RAM. Vài MB dùng để lưu trữ ảnh kernel (kernel code và cấu trúc dữ liệu tĩnh của kernel). Phần còn lại của RAM được điều khiển bởi hệ thống bộ nhớ ảo và được sử dụng theo 3 cách khả thi sau: • Đáp ứng yêu cầu của kernel về bộ đệm, bộ mô tả và những cấu trúc dữ liệu kernel động khác. • Đáp ứng yêu cầu của tiến trình cho vùng bộ nhớ chung và cho việc ánh xạ bộ nhớ của tập tin. • Có khả năng thực thi tốt hơn từ ổ đĩa và những thiết bị đệm khác bằng cache. Mặt khác, vì bộ nhớ RAM có giới hạn, phải thực hiện cân đối giữa những dạng yêu cầu bộ nhớ, đặc biệt khi bộ nhớ trống còn ít sẽ bị bỏ. Ngoài ra khi đến ngưỡng tới hạn của bộ nhớ có sẵn, có thể triệu gọi thuật toán page-frame-reclaiming để giải phóng thêm bộ nhớ. 1.6.8.3 Bộ định vị bộ nhớ kernel: Kernel Memory Allocator (KMA) là một hệ thống phụ cố gắng đáp ứng những yêu cầu cung cấp vùng bộ nhớ từ tất cả các phần của hệ thống. Một số những yêu cầu này đến từ những hệ thống phụ khác cần bộ nhớ cho kernel sử dụng, một số yêu cầu đến thông qua lời gọi hệ thống từ chương trình của người dùng để tăng không gian địa chỉ tiến trình. Một KMA hiệu quả có những đặc điểm sau: • Phải nhanh, đây là thuộc tính chủ yếu, vì nó được triệu gọi bởi tất cả kernel hệ thống phụ (bao gồm bộ xử lí ngắt). • Tối thiểu lượng bộ nhớ lãng phí. • Cố gắng giảm bớt vấn đề phân mảnh bộ nhớ. • Cùng với những hệ thống phụ quản lí bộ nhớ khác để mượn và giải thoát các page Nhiều loại KMA khác nhau được đề xuất dựa trên nhiều thuật toán khác nhau: • Bộ định vị bản đồ tài nguyên hệ thống SVTH: Trần Quang Thuận – Phan Bá Minh. - 26 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. • Danh sách Power-of-two. • Bộ định vị McKusick-Karels • Hệ thống Buddy • Bộ định vị Mach’s Zone. • Bộ định vị Dynix. • Bộ định vị Solaris’s Slab 1.6.8.4 Điều khiển không gian địa chỉ ảo của tiến trình : Không gian địa chỉ của tiến trình chứa tất cả địa chỉ bộ nhớ ảo mà tiến trình đó được phép tham chiếu. Kernel thường lưu không gian địa chỉ ảo của tiến trình lên một danh sách các mô tả vùng nhớ. Ví dụ, khi một tiến trình bắt đầu thực thi một số chương trình thông qua lời gọi hệ thống giống như exec(), kernel gán cho tiến trình một không gian địa chỉ ảo mà gồm cả vùng bộ nhớ cho: • Code thực thi của chương trình • Dữ liệu khởi tạo của chương trình • Dữ liệu chưa khởi tạo của chương trình • Program stack khởi tạo của chương trình (đó là User Mode stack) code thực thi và dữ liệu của thư viện chia sẻ. • Heap (bộ nhớ được yêu cầu linh động bởi chương trình) Tất cả hệ điều hành Linux/Unix gần đây sử dụng cách định vị trí bộ nhớ demand paging. Với demand paging, một tiến trình có thể bắt đầu thực thi chương trình với không có page nào của nó trong bộ nhớ vật lý. Khi nó truy xuất một page không tồn tại, MMU phát ra một ngoại lệ, bộ xử lí ngoại lệ tìm vùng bộ nhớ có liên quan, định vị trí một page trống và khởi tạo nó với dữ liệu thích hợp. Tương tự, khi tiến trình yêu cầu linh động bộ nhớ bằng cách sử dụng lời gọi hệ thống malloc() hay brk(), kernel chỉ việc cập nhật kích thước của vùng nhớ heap của tiến trình. Gán một page cho tiến trình chỉ khi nó phát ra một ngoại lệ khi cố gắng tham chiếu đến địa chỉ bộ nhớ ảo. Không gian địa chỉ ảo cũng cho phép những cách hiệu quả khác như Copy-On- Write. Ví dụ, khi tạo một tiến trình mới, kernel chỉ việc gán page của parent cho không gian địa chỉ của child nhưng nó đánh dấu là read only. Xảy ra một ngoại lệ ngay SVTH: Trần Quang Thuận – Phan Bá Minh. - 27 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. khi parent hay child cố gắng sửa đổi nội dung của page. Bộ xử lí ngoại lệ gán một page mới để tiến trình tương tác và khởi tạo nó với nội dung của trang gốc. 1.6.8.5 Swapping và caching Để mở rộng kích thước của việc sử dụng không gian địa chỉ ảo bởi tiến trình, hệ điều hành Unix tạo ra vùng swap trên ổ đĩa. Bộ nhớ ảo hệ thống theo dõi nội dung của một page là đơn vị cơ bản cho swapping. Bất cứ khi nào những tiến trình tham khảo đến page ngoài swap , MMU phát sinh một ngoại lệ. Bộ xử lí ngoại lệ sau đó cấp phát một page mới và khởi tạo page với nội dung gốc được lưu trên ổ đĩa. Mặt khác, bộ nhớ vật lí cũng được sử dụng như là cache cho ổ đĩa cứng và những khối thiết bị khác. Vì đĩa cứng truy xuất chậm: truy cập ổ đĩa mất nhiều milliseconds, đó là thời gian rất lớn so với thời gian truy cập RAM. Do đó, những ổ đĩa này thường làm chậm khả năng thực thi của hệ thống. Một trong những thứ đã được thực thi trong hệ thống Unix sớm nhất là làm chậm việc ghi lên đĩa bằng cách nạp vào RAM một tập bộ đệm ổ đĩa tương ứng với nội dung đọc từ ổ đĩa. Lời gọi hệ thống sync() thúc đẩy sự đồng bộ ổ đĩa bằng cách ghi tất cả những bộ đệm (ví dụ tất cả bộ đệm có nội dung khác với khối tương ứng trong ổ đĩa) lên đĩa. Để tránh mất dữ liệu, tất cả hệ điều hành theo dõi định kì việc ghi dữ liệu từ bộ đệm vào ổ đĩa. 1.6.9 Device Drivers Kernel tương tác với thiết bị nhập xuất là các device driver. Device driver nằm trong kernel và chứa cấu trúc dữ liệu, các chức năng để điều khiển một hay nhiều thiết bị như ổ đĩa cứng, bàn phím, chuột, màn hình, card mạng và những thiết bị kết nối đến SCSI bus. Mỗi driver tương tác với phần còn lại của kernel (thậm chí với driver khác) thông qua một giao tiếp riêng biệt. Hướng tiếp cận này có những lợi ích sau: • Mã đặc tả thiết bị có thể được đóng gói trong module cụ thể. • Nhà cung cấp có thể thêm thiết bị mới mà không cần biết source code của kernel: chỉ cần biết đặc tả của interface. Kernel xem tất cả thiết bị giống nhau và truy xuất chúng thông qua cùng interface Có thể ghi một device driver như là một module mà có thể được linh động nạp vào kernel mà không cần yêu cầu hệ thống khởi động lại, cũng có thể không nạp SVTH: Trần Quang Thuận – Phan Bá Minh. - 28 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. những module mà không còn được yêu cầu sử dụng nữa, vì vậy tối thiểu hóa kích thước ảnh kernel được lưu trữ trên RAM. Hình dưới mô tả những device driver interface với phần còn lại của kernel và các những tiến trình. Một số chương trình người dùng muốn thao tác trên thiết bị phần cứng. Chương trình user đưa ra yêu cầu đến kernel, sử dụng lời gọi hệ thống tập tin có liên quan và những tập tin về thiết bị thông thường được tìm thấy trong thư mục /dev. Tập tin thiết bị là phần cho user giao tiếp với phần cứng. Mỗi tập tin thiết bị tham khảo đến một device driver cụ thể nào đó mà được triệu gọi bởi kernel để thực hiện những hoạt động được yêu cầu trên phần cứng. Hình 1-5: Device driver interface SVTH: Trần Quang Thuận – Phan Bá Minh. - 29 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Chương 2 Thiết kế một hệ thống Linux nhúng 2.1 Phần cứng hỗ trợ 2.1.1 Kiến trúc CPU Linux có thể chạy trên rất nhiều kiến trúc CPU khác nhau, tuy nhiên không phải kiến trúc nào cũng được sử dụng trong hệ thống nhúng, phần này chỉ giới thiệu qua những kiến trúc điển hình và các board kèm theo CPU. Dòng x86 bắt đầu từ 368 được Intel giới thiệu vào năm 1985 và bao gồm những sản phẩm nối tiếp, 486 và họ Pentium, cùng với các bộ xử lý tương thích của hãng khác như AMD hay National Semiconductor. Mặc dù x86 phổ biến nhất và là nền tảng được cộng đồng Linux sử dụng, nó chỉ đại diện cho một bộ phận nhỏ của các thiết bị nhúng trên thị trường. Hầu hết các nhà thiết kế đều sử dụng bộ xử lý ARM, MIPS hay PowerPC vì mức độ phức tạp và giá thành chung. ARM, viết tắt của Advanced RISC Machine, là một họ vi xử lý tiếp tục được công ty ARM Holding duy trì và phát triển. Trái ngược với các công ty khác như IBM, Motorola hay Intel. ARM không sản xuất CPU mà thiết kế các nhân CPU dựa trên nhân ARM cho các khách hàng của họ, thay đổi tùy theo nhu cầu cho phù hợp với ứng dụng của khách hàng. Vì vậy có một đặc điểm dộc đáo là tất cả các bộ xử lý ARM đều sử dụng chung tập lệnh, điều này giúp cho tính tương thích của các phần mềm được nâng cao. Kiến trúc PowerPC là kết quả của sự hợp tác giữa IBM, Motorola và Apple. Thừa hưởng ý tưởng từ 3 hãng lớn này, đặc biệt là IBM với kiến trúc Performance Optimization With Enhanced RISC (POWER). Chip PowerPC được biết đến trong sản phẩm Apple’s Mac và còn rất nhiều các máy tính đến những hệ thống nhúng dùng PowerPC làm bộ xử lý. Hệ thống TiVO phổ biến dựa trên CPU PowerPC. Cũng như x86, ARM là họ xử lý được hỗ trợ đầy đủ trên hệ điều hành Linux. SVTH: Trần Quang Thuận – Phan Bá Minh. - 30 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Ngoài những CPU kể trên, MIPS, Hitachi SuperH hay Motorola 68000 cũng được sử dụng trong các hệ thống Linux nhúng. 2.1.2 Bus và các chuẩn giao tiếp Bus và các chuẩn giao tiếp là nền tảng để CPU có thể kết nối đến các thiết bị ngoại vi. Mỗi chuẩn bus hay các chuẩn giao tiếp có tính phức tạp riêng của nó và khả năng hỗ trợ của Linux cho các chuẩn bus hay giao tiếp rất lớn. Đối với các hệ thống nhúng ngày nay, hầu hết các chuẩn giao tiếp công nghiệp và thương mại đều có sử dụng trên hệ thống nhúng, nhưng đặc biệt là các chuẩn như USB, IEEE194 hay I2C vì tính ưu việt và nhỏ gọn của nó. Ngoài ra những chuẩn như ISA, PCI, PCMCIA, CompactPCI, Parallel port hay SCSI cũng có thể được sử dụng trong các hệ thống nhúng. 2.1.3 Các thiết bị lưu trữ Tất cả các hệ thống nhúng cần thiết một thiết bị lưu trữ bền bỉ để khởi động từ những giai đoạn đầu tiên của quá trình boot. Hầu hết các hệ thống, bao gồm cả những hệ thống Linux nhúng đều liên tục sử dụng sử dụng các thiết bị lưu trữ được khởi tạo ban đầu trong suốt quá trình hoạt động, để thực thi code hay truy xuất dữ liệu. Nếu so sánh với những hệ thống nhúng cở điển thì Linux yêu cầu cao hơn đối với những thiết bị lưu trữ cho hệ thống nhúng, cả về kích thước và tổ chức. Trong các thuật ngử của Linux, memory technology devices (MTD) để chỉ tất cả các thiết bị nhớ như ROM, RAM, bộ nhớ flash và M-Systems' DiskOnChip (DOC). Mỗi thiết bị có khả năng, nét đặc thù riêng và giới hạn của chúng. Vì vậy để lập trình và sử dụng các MTD trong hệ thống nhúng, người phát triển hệ thống thường dùng những công cụ và phương pháp riêng cho thiết bị đó. SVTH: Trần Quang Thuận – Phan Bá Minh. - 31 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Hình 2-1: Các bộ nhớ MTD Mặc dầu chỉ có một phần nhỏ các thiết bị nhúng truyền thống sử dụng không gian lưu trữ lớn như trên một đĩa cứng IDE, nhưng hầu hết lại có nhiều hệ thống nhúng lại sử dụng các thiết bị flash tương thích ATA (AT attatchment, thường được hiểu là IDE (Integrated Drive Electronics). ATA là tên chính thức của chuẫn giao tiếp phát triển bởi 3 công ty Impromis, Western Digital và Compaq.) như CompactFlash. Các thiết bị lưu trữ CompactFlash chỉ có thể truy xuất qua chuẩn ATA. Trong các hệ thống Linux nhúng có sử dụng lưu trữ trên đĩa, thông thường đĩa sẽ lưu trữ các OS bootloader, root filesystem và có thể là một phân vùng swap. Điều đáng ngạc nhiên ở đây là không phải hệ thống nhúng cũng tương thích với các ổ đĩa ATA, nó phải được cấu hình trong lúc biên dịch nhân thì mới có thể truy xuất vào lúc khởi động hệ thống. Hệ thống Linux nhúng ít khi sử dụng chuẩn SCSI làm chuẩn giao tiếp với thiết bị lưu trữ. SCSI thường dùng trong các server nhiều hơn vì tốc độ và độ tin cậy của nó. 2.1.4 Kết nối mạng Ngày càng có nhiều hệ thống nhúng được tích hợp kết nối mạng. Linux cũng hỗ trợ rất nhiều các phần cứng mạng. Điển hình nhất là các chuẩn mạng Ethenet, IrDA (Infrared Data Association (IrDA) ra đời năm 1993 bởi hơn 50 công ty với mục tiêu tạo ra và đẩy mạnh sử dụng thiết bị kết nối hồng ngoại giá thành thấp.) và Bluetooth được sử dụng nhiều trên các thiết bị nhúng do khả năng đem lại của nó.Ethernet hiện SVTH: Trần Quang Thuận – Phan Bá Minh. - 32 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. nay là thiết bị thâm nhập nhiều nhất, tài liệu nhiều nhất và giá thành thấp nhất trong những chuẩn giao tiếp mạng khác. Hình 2-2: Các nhánh của IrDA trong Linux Hình 2-3: Các nhánh của Linux BlueZ Bluetooth 2.2 Các công cụ phát triển Để chúng ta có thể biên dịch để hệ điều hành có thể chạy trên nền CPU không phải x86?. Để làm được điều đó ta cần một bộ biên dịch chéo (cross-compiler) .Nhiệm vụ của bộ biên dịch này là sẽ chuyển những mã lệnh nhị phân viết trên nền CPU này SVTH: Trần Quang Thuận – Phan Bá Minh. - 33 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. thành những mã lệnh nhị phân trên nền CPU khác . Ví dụ như khi ta biên dịch MontaVista trên máy host là x86 của Intel nhưng mục đích của chúng ta muốn chạy MontaVista trên nền PowerPC thì ta sẽ cần một cross compiler để chuyển đổi những mã lệnh chạy trên nền x86 sang mã lệnh chậy trên PowerPC. Các Cross-compiler này thường được phát triển bởi những chuyên gia rất giỏi về kiến trúc CPU bởi vì chỉ có thể chuyển đổi một mã lệnh nhị phân từ nền CPU này sang nền CPU khác ta phải biết kiến trúc CPU, cách định địa chỉ, các quy định về opcode, operand của cả hai CPU đó. Kèm theo đó là những công cụ cần thiết để phát triển các ứng dụng chạy trên target bao gồm các tiện ích ở dạng nhị phân, bộ biên dịch C (gcc) và thư viện C (glibc). Việc cầu hình và xây dựng một toolchain phức tạp và là một tiến trình độp lập đòi hỏi có kiến thức phụ thuộc giữa các gói phần mêm và những quy luật tương ứng của chúng. Hiểu biết này là rất cần thiết, vì các phiên bãn GNU toolchain được phát triển và đưa ra độc lập với nhau. Host Target Kernel Binutils Gcc Glibc Patch i386 PPC 2.10.1 2.95.3 2.2.1 Không PPC i386 2.13.2.1 2.95.3 2.2.3 Không i386 ARM 2.4.1-rmk1 2.10.1 2.95.3 2.1.3 Có PPC i386 2.13.2.1 3.2.1 2.3.1 Không PPC ARM 2.10.1 2.95.3 2.2.3 Có i386 MIPS 2.8.1 egcs-1.1.2 2.0.6 Có i386 SuperH 2.11.2 3.0.1 2.2.4 Có Bảng 2-1: Kết hợp phiên bản các gói công cụ và thư viện 2.3 Chọn lựa và biên dịch Linux kernel Đây là những phân phối (distributions - distro) thương mại được duy trì hỗ trợ từ những nhà cung cấp. Các distro này cung cấp khả năng, giải pháp đối với hàng loạt các kiến trúc hệ thống cho các thị trường khác nhau. Từ các hệ thống thông tin liên lạc cao cấp đến các thiết bị cầm tay, các thiết bị điều khiển thông thường… • AMIRIX: Embedded Linux SVTH: Trần Quang Thuận – Phan Bá Minh. - 34 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Có nguồn gốc từ mã nguồn mở Debian GNU/Linux, được thay đổi để hỗ trợ thêm nhiều thiết bị chuyên dụng cùng các công cụ cấu hình hệ thống. Hỗ trợ small- footprint, diskless, Flash-based, đòi hỏi hệ thống headless • Coollogic: Coollinux Coollinux AE (Appliance Edition) kết hợp sức mạnh của hệ điều hành Linux nhúng và công nghệ Java thành một hệ điều hành cho các thiết bị Internet thế hệ mới. • Coventive: Xlinux Một nhân Linux đầy đủ tính năng và có thể cấu hình chỉ nhỏ khoảng 143KB cho các ứng dụng thông tin và các thiết bị nhúng. Hỗ trợ các dòng xử lý: 586, 686, MediaGX, STPC, StrongARM, SH3/SH4, PA-RISC, ARM-7… • Esfia: RedBlue Linux Một distro Linux nhúng cho các giải thông tin vô tuyến, có nguồn gốc từ nhân Linux phiên bản 2.4. Nhân Linux thông thường chỉ chiếm khoảng 400KB và hỗ trợ các bộ xử lý có MMU lẫn không có. • KaeilOS (formerly Klinux) Distro Linux cho các ứng dụng công nghiệp. Bao gồm cả các thiết bị phát triển và sửa lỗi cho các hệ thống nhúng real-time. Các tài liệu chi tiết hoàn toàn được viết bởi công ty Koan Software, Bergamo, Italy. • KYZO: PizzaBox Linux Sự kết hợp của Linux và Samba, là một distro dùng làm server phục vụ quản lý file, máy in và đĩa CD. Thiết kế rất nhỏ gọn, chỉ cần 6MB Flash chạy trên xử lý 486 (hoặc mạnh hơn). • Lineo: Embedix Giải pháp Linux nhúng được thiết kế cho hệ thống đặc biệt về tốc độ, bộ nhớ và các thiết bị lưu trữ. Hỗ trợ nhiều dòng xử lý (có và không có MMU) như X86, PowerPC, ARM, MIPS… Bao gồm cả hỗ trợ cho small-footprint, real-time. • LynuxWorks: BlueCat Distro này đáp ứng yêu cầu của những người pháp triển hệ thống nhúng. Cho phép cấu hình phù hợp với yêu cầu của hệ thống nhúng. Hỗ trợ từ các thiết bị nhỏ đến những hệ thống lớn đa bộ xử lý và co tính khả dụng cao, hỗ trợ các dòng xử lý X86, PowerPC, ARM, MIPS… SVTH: Trần Quang Thuận – Phan Bá Minh. - 35 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. • Mizi: Linu@ Linu@ là một hệ điều hành Linux nhúng với giao diện người dùng trên Qt/Embedded. Tính hiệu quả và kích thước nhỏ gọn nên rất phù hợp với các thiết bị Internet, điện thoại thông minh, hay thiết bị trợ lý số. Hỗ trợ nhiều dòng xử lý như ARM, StrongARM, MIPS, x86, và MPC. Hệ điều hành chỉ cần 2MB DRAM và 4MB Flash memory. • Neoware: NeoLinux Distro Linux nhúng này phát triển từ Red Hat Linux và được tối ưu cho các thiết bị tin tức. Hỗ trợ khả năng khởi động từ Flash hoặc từ xa thông qua server mạng, có khả năng quản lý từ xa. • PalmPalm: Tynux Giải pháp hệ điều hành Linux nhúng cho các thiết bị internet bao gồm cả máy chơi mp3, video, truyền hình internet, PDA hay điện thoại internet, các thiết bị video hội thảo, video phone… • REDSonic: RedIce-Linux Hỗ trợ các máy tính trên một board, có thể chạy trên DiskOnChip và các bộ nhớ CompactFlash, đồng thời cũng có khả năng đáp ứng real-time. • RidgeRun: DSPLinux Distro Linux nhúng này tập trung vào khía cạnh đa phương tiện kèm theo các toolkit,thiết bị không dây và các thiết bị băng thông rộng dựa trên bộ xử lý kép, kết hợp lõi ARM và lõi bộ xử lý số tín hiệu trên một phiến chip. Nhân DSPLinux chạy trên lõi ARM, trong khi các tác vụ thời gian thực sẽ thực thi trên lõi DSP. • SysGo: ELinOS Embedded Linux ElinOS dựa trên nhân Linux 2.5 vì vậy cung cấp những tính năng mới nhất như Journaling Flash File System (JFFS), Memory Technology Devices (MTD), và đặc biệt là USB. Hỗ trợ các tác vụ real-time (RTAI kernel extension) • TimeSys: Linux GPL Distro Linux GPL hỗ trợ các board nhúng. Cùng với các thư viện, tool chains, tiện ích, các kịch bản và tài liệu đi kèm, tất cả đều có giấy phép GPL. Hơn nữa là các lựa chọn để cải thiện hệ thống đáp ứng real-time, chất lượng dịch vụ và hiệu suất mạng. • Tuxia: TASTE SVTH: Trần Quang Thuận – Phan Bá Minh. - 36 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. TASTE nhắm vào các thiết bị Internet như các webpads, set-top boxes, các máy khách nhỏ và điện thoại truyền hình. Nó cũng kèm theo rất nhiều các software, driver phần cứng, nhân của Linux nhúng, các engine đồ họa, giả lập Java… • Vitals System: vLinux Một gói Linux cho các ứng dụng trên nền xử lý ARM. vLinux cũng có thể hỗ trợ các dòng xử lý không có MMU, phù hợp với các thiết kết hạ thấp giá thành cho các sản phẩm thương mại. vLinux hiện tại có thể chạy trên họ xử lý ARM, kiến trúc RISC của Samsung, tuy nhiên khả năng chạy trên các bộ xử lý khác đang được cải thiện. 2.3.1 MontaVista Linux Với hơn 2000 đối tác phát triển MontaVista Linux trên khắp thế giới trên khắp các lĩnh vực công nghiệp. Không thể phủ nhận MontaVista là nhà cung cấp nền tảng hệ điều hành Linux thương mại hàng đầu thế giới cho các thiết bị số thông minh và cơ sở hạ tầng thông tin liên lạc. Với 4 trong 5 nhà cung cấp các thiết bị mạng hàng đầu sử dụng MontaVista Linux, cũng như những nhà sản xuất điện thoại di động, điện tử tiêu dùng và viễn thông trên khắp thế giới – MontaVista là một trong những hệ điều hành được sử dụng rộng rãi nhất trong hơn 40 triệu thiết bị nhúng trên giới.MontaVista Linux được thiết kế có khả năng mở rộng, độ tin cậy cao và hiệu suất cao, khả năng real-time, đáp ứng cho các thiết bị thông minh ngày nay. Hỗ trợ số lượng các kiến trúc xử lý nhiều nhất trong các thiết bị nhúng cao cấp, bao gồm dòng x86, PowerPC, ARM, SH và MIPS. MontaVista Linux hỗ trợ hơn 60 COTS, các bo mạch phát triển và các công cụ phát triển nhanh. Một số thiết bị điển hình sử dụng MontaVista Linux có thể kể đến như các điện thoại Motorola A760 và 768i. Mặc dầu sự thật Motorola là một trong những thành viên sáng lập ra hệ điều hành Simbian. Chiếc A760 được tung ra vào ngày 16 tháng hai năm 2003 ở thị trường Trung Quốc. Đây cũng là lần đầu tiên Linux được sử dụng trên máy điện thoại, từ đó Motorola tập trung vào nền Linux của họ, và đã công bố nền tảng trong tương lai của họ vẫn sẽ là Linux và Java. Hiện nay cũng có những điện thoại của Motorola sử dụng Linux, nổi tiếng có thể kể đến Motorola RAZR2 và các dòng Motorola ROKR E2, E6. SVTH: Trần Quang Thuận – Phan Bá Minh. - 37 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Texas Istruments cũng đã công bố họ sẽ sử dụng MontaVista Linux phiên bản Professional là hệ điều hành được hỗ trợ trên nền tảng System-on-chip DaVinci. 2.3.2 uClinux Phiên bản uClinux đầu tiên bắt nguồn từ nhân Linux phiên bản 2.0. uClinux nằm trong dự án phát triển đưa hệ điều hành Linux lên trên các hệ thống CPU không có MMU. Memory Management Unit, thành phần cứng trong một máy tính. Đáp ứng yêu cầu quản lý truy xuất bộ nhớ của CPU. Chức năng của nó bao gồm: chuyển từ địa chỉ tham chiếu sang địa chỉ phần cứng, ngăn không cho các tiến trình tranh chấp bộ nhớ, quản lý cache và bus. Tuy nhiên, dự án phát triển và mở rộng, bao trùm các kiến trúc xử lý. Ngày nay uClinux được biết đến như một hệ điều hành bao gồm các phiên bản nhân 2.0, 2.4, và 2.6, cùng với rất nhiều các ứng dụng, thư viện và các công cụ phát triển. uClinux là một trong những hệ điều hành thích hợp nhất đối với các hệ thống nhúng và nó hoàn toàn miễn phí. Phiên bản mới nhất của uClinux có khả năng hỗ trợ nhiều kiến trúc xử lý, điển hình là các dòng M86k, ColdFire, ARM, Sparc, NEC v850, H8/300, ngay cả softcore CPU như Altera NIOS và Xilinx MicroBlaze. Hỗ trợ thư viện uClibc cũ và các phiên bản mới hơn như uClibc-0.9.27. 2.3.3 Cấu hình kernel Cấu hình là bước đầu tiên cần làm trước khi xây dựng kernel cho target. Có rất nhiều cách và các lựa chọn khi cấu hình kernel. Không xét đến các cách cầu hình hay các lựa chọn của người dùng, kernel sẽ tạo ra file .config khi hoàn tất quá trình cấu hình và sẽ tạo ra hàng loạt các liên kết và header file sử dụng trong suốt quá trình biên dịch. Ở đây chỉ trình bày sự khác nhau khi cấu hình kernel trên các hệ thống nhúng. Trong quá trình cấu hình, người dùng có khả năng lựa chọn các module sẽ dùng trong kernel. Tuy theo target mà các menu lựa chọn có thể thay đổi, một số menu sẽ không thể dùng được trên kiến trúc CPU của hệ thống nhúng. Những menu có thể dùng khi lựa chọn trên các hệ thống nhúng bao gồm: ™ Code maturity level options ™ Loadable module support ™ General setup ™ Memory technology devices SVTH: Trần Quang Thuận – Phan Bá Minh. - 38 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. ™ Block devices ™ Networking options ™ ATA/IDE/MFM/RLL support ™ SCSI support ™ Network device support ™ Input core support ™ Character devices ™ Filesystems ™ Console drivers ™ Sound ™ Kernel hacking Bảng 2-2: Lựa chọn hệ thống và bộ xử lý Bảng 2-3: Phần cứng hỗ trợ với các kiến trúc CPU Việc cấu hình phần kernel có thể thực hiện bằng các phương pháp khác nhau: cấu hình bằng command-line bằng make config, cấu hình sử dụng các tùy chọn cũ bằng make oldconfig, cấu hình bằng các menu đơn giản bằng make menuconfig và cấu hình bằng giao diện Xwindows bằng make xconfig. Việc cấu hình cũng đòi hỏi người dùng có kiến thức về các module sẽ sử dụng trong kernel. SVTH: Trần Quang Thuận – Phan Bá Minh. - 39 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. 2.4 Xây dựng hệ thống thư mục gốc (root filesystem) 2.4.1 Hệ thống tập tin (File Systems) Mỗi hệ điều hành đều có cách tổ chức dữ liệu riêng. Ở mức vật lý, đĩa cứng được định dạng thành các cung từ bao gồm sector, track, cylinder (chức năng này thường được lệnh format cấp thấp thực hiện). Tuy nhiên ở mức logic các hệ điều hành thường sắp xếp tổ chức dữ liệu theo chỉ mục và phân cấp sao cho quá trình sao lưu, tìm kiếm dữ liệu là hiệu quả và nhanh nhất, cơ chế mà mỗi hệ điều hành tổ chức lưu trữ tập tin trên đĩa được gọi là hệ thống file. Ví dụ DOS và Windows 95/98 sử dụng cơ chế bảng FAT16, FAT32 để lưu tên thư mục và tập tin. Windows NT có cách tổ chức và lưu file mới hơn gọi là NTFS (NT filesystem). Linux sử dụng hệ thống EXT2 (Second Extended File System) để lưu trữ dữ liệu và tên của tập tin, thư mục. EXT2 sử dụng một bảng i-node bao gồm một tập các nút để lưu thông tin và tên của tập tin, thư mục. Mỗi tập tin hay thư mục đều được tham chiếu hay trỏ đến bởi một i-node. Dữ liệu của tập tin được lưu vào thành từng khối liền nhau. Hệ thống EXT2 bảo đảm cơ chế lưu trữ tối ưu và khiến dữ liệu trên đĩa cứng không bị phân mảnh (fragment) như trong hệ thống file sử dụng bảng FAT của DOS. 2.4.2 Các thư mục trên Linux Lần đầu tiên làm quen với Linux có lẽ bạn sẽ thấy Linux có khá nhiều thư mục, nhưng nhìn chung các thư mục này đã được chuẩn hóa và có những mục đích sử dụng nhất định. Tất cả các file và thư mục được lưu trữ theo một cấu trúc hình cây duy nhất. Gốc của cây thư mục này được gọi là root và được ký hiệu bằng ký tự sổ trái /. Cơ bản một hệ thống Linux thường có các thư mục sau: /bin Chứa các file chương trình thực thi (file nhị phân) và file khởi động của hệ thống. /boot Các file ảnh (image file) của kernel dùng cho quá trình khởi động thường được đặt trong thư mục này. /dev Chứa các file thiết bị. Trong thế giới UNIX và Linux, các thiết bị phần cứng được xem như là file. Đĩa cứng và các phân vùng của SVTH: Trần Quang Thuận – Phan Bá Minh. - 40 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. bạn cũng là các file như hda1, hda2… đĩa mềm mang tên fd0… các tập tin thiết bị này thường được đặt trong /dev. /etc Thư mục này chứa các file cấu hình toàn cục của hệ thống. Có thể có nhiều thư mục con trong thư mục này nhưng nhìn chung chúng chứa các file script để khởi động hay phục vụ cho mục đích cấu hình chương trình trước khi chạy. /home Chứa các thư mục con đại diện cho mỗi người dùng khi đăng nhập. Nơi đây tựa như ngôi nhà của người dùng. Khi quản trị tạo tài khoản người dùng, họ sẽ cung cấp cho người dùng một thư mục con trong /usr người dùng hoàn toàn có quyền sao chép, xóa file, tạo thư mục con trong thư mục home của mình mà không ảnh hưởng đến người dùng khác. /lib Chứa các file thư viện *.so hoặc *.a. Các thư viện C và các thư viện liên kết động cần cho chương trình khi chạy và cho toàn hệ thống. Thư mục này tương tự như thư mục system32 của Windows. /lost+found Khi hệ thống khởi động hoặc khi bạn chạy trình fsck (công cụ kiểm tra và sửa lỗi hệ thống file của Linux) nếu tìm thấy chuỗi dữ liệu thất lạc trên đĩa cứng không liên quan đến các tập tin. Linux sẽ gộp chúng lại và đặt vào thư mục này để nếu cần bạn có thể lấy lại dữ liệu bị mất. /mnt Chứa các thư mục kết gán tạm thời đến các ổ đĩa hay đến các thiết bị khác. Trong /mnt có thể có các thư mục con khác như cdrom (kết gán ở đĩa CD) hay floppy là thư mục kết gán với đĩa mềm. /sbin Chứa các file thực thi của hệ thống thường chỉ cho phép sử dụng bởi người quản trị hệ thống. /tmp Thư mục tạm chương trình thường dùng để chứa các file tạm trong quá trình chạy. Các file trong này sẽ được hệ thống dọn dẹp nếu như không dùng đến nữa. /usr Chứa nhiều thư mục con khác như /usr/bin hay /usr/sbin. Một SVTH: Trần Quang Thuận – Phan Bá Minh. - 41 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. trong những thư mục con quan trọng đó là /usr/local. Bên trong thư mục này có các thư mục tương tự root như sbin, lib, bin… Hầu hết các ứng dụng cài đặt trên Linux đều đưa vào thư mục này, nó giống như Program Files trên Windows. /var Chứa các file biến thiên bất thường, những file dữ liệu đột nhiên tăng kích thước trong thời gian ngắn rồi sau đó lại giảm kích thước xuống còn rất nhỏ. Điển hình là các file dùng làm hàng đợi chứa dữ liệu đưa ra máy in hoặc các hàng đợi chứa email. Ngoài các thư mục trên, còn có một số thư mục quan trọng khác rất cần thiết cho công việc của người lập trình trên Linux. /usr/include /usr/local/include Chứa các file khai báo hàm (header) cần dùng khi biên dịch chương trình nguồm sử dụng các thư viện của hệ thống. /usr/src Chứa mã nguồn (kể cả mã nguồn của Linux). /usr/man Chứa các tài liệu hướng dẫn. Cho dù máy tính có thể gắn thêm nhiều ổ cứng nhưng chúng cũng chỉ được gắn vào thành một nhánh trong cây thư mục chính. Tùy theo người quản trị hệ thống chỉ định mà các đĩa cứng phụ sẽ được gắn kết vào một thư mục nào đó trên cây thư mục gốc. SVTH: Trần Quang Thuận – Phan Bá Minh. - 42 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Hình 2-4: Cấu trúc thư mục trên Linux SVTH: Trần Quang Thuận – Phan Bá Minh. - 43 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Chương 3 XUPV2P và phần mềm phát triển của Xilinx 3.1 Kiến trúc phần cứng của Kit XUPV2P 3.1.1 Tổng quan - Virtex II Pro FPGA với Softcore CPU: Microblaze và Hardcore: PowerPC405 core, FPGA 30816 Logic Cells. - Sử dụng trên 2GB (DDR) SDRAM. - Sử dụng cấu trúc SystemACE và Type II CompactFlash để lưu trữ cấu hình và dữ liệu FPGA ,thực hiện chế độ automatic load sau mỗi lần khởi động lại Kit. - Khả năng nhúng Platform (nền FPGA) thông qua cáp USB cổng JTAG. - Cung cấp chế độ “Golden” hoặc “User” FPGA. - 10/100 Ethernet MAC. - 1 cổng nối tiếp RS232 DB9. - 2 cổng nối tiếp PS-2 - 4 Led được nối với các chân I/O pin. - 4 Switch (công tắc) được nối với các chân I/O pin. - 5 button (nút nhấn) được nối với các chân I/O pin. - Bộ chuyển đổi AC97 audio CODEC. - Sử dụng microphone và đường audio input. - Cổng monitor (màn hình máy tính) XSGA lên đến độ phân giải 1200*1600 ở 70 Hz. - 3 cổng ATA nối tiếp. - USB 2 port - Xung clock hệ thống 100Mhz, xung SATA clock 75Mhz. - Khả năng cung cấp xung clock tùy thuộc vào yêu cầu người sử dụng. - Cung cấp nguồn điện DC trên Kit. SVTH: Trần Quang Thuận – Phan Bá Minh. - 44 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Kit XUP Virtex-II Pro Development System có khả năng tạo ra một cấu trúc phần cứng cao cấp.Cấu trúc này bao gồm một trung tâm Virtex-II Pro Platform FPGA (vi xử lý), và các thành phần chức năng liên kết có thể sử dụng riêng biệt để tạo ra một hệ thống đa chức năng cho nhiều ngành công nghiệp hiện đại. Hình 3-1: Sơ đồ khối của Kit XUP Virtex Hình 3-2: Kit XUP Virtex-II Pro Development System SVTH: Trần Quang Thuận – Phan Bá Minh. - 45 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. 3.1.2 Khối FPGA Virtex II Pro Cấu hình XC2VP30 Độ dày 13969 Kích thước 80*46 RAM phân phát 428Kb Khối Multiplier Blocks 136 Khối Block RAMs 2448Kb DCMs 8 PowerPC RISC Cores 2 Muti-Gigabit nhận và truyền 8 Bảng 3-1: Đặt điểm khối FPGA Bảng 3-2: Các khối giao tiếp ngoài của Virtex-II Pro Platform FPGA - Nguồn cung cấp 5 VDC ổn áp. - Nguồn trên Kit Switching 3.3V,2.5V và 1.5V cho khối FPGA. - Nguồn tuyến tính cho các khối thành phần chức năng liên kết. - Nguồn tuyến tính cho khối Multi-Gigabit Transceivers (MGTs) SVTH: Trần Quang Thuận – Phan Bá Minh. - 46 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. - 4 trong 8 khối Multi-Gigabit Transceivers (MGTs) dành cho connectors (liên kết) và cho người tùy sử dụng.3 khối của Bidirectional MGT channels dành cho SATA connectors và SMA connectors được sử dụng chức năng như Terminal.Xung sử dụng 75Mhz riêng biệt cho SATA communication.2 cổng của SATA connector được cấu hình như Host port (cổng chủ) và 3 cổng của SATA connector được cấu hình như Target Port (cổng đến) cho phép các board_to_board (các Kit liên kết với nhau) trong một khối mạng chung. - Kit XUP Virtex-II Pro Development System cho phép chúng ta sử dụng RAM memory chuẩn JEDEC 184 –pin dual in-line Double Data Rate Synchronous Dynamic (184 chân truyền dữ liệu đồng bộ).Kit cung cấp cho người sử dụng buffer vào ra tương ứng RAM 2GB hoặc ít hơn 64-bit hoặc 72-bit.Khuyến cáo: chỉ nên sử dụng 72-bit cho việc dò và sửa lỗi ECC. Bảng 3-3: Các module bộ nhớ thích hợp 3.1.3 System ACE Cấu hình System ACE của Xilinx đòi hỏi Compact Flash phải có vùng không gian tác động lớn, có thể cấu hình trước và dung lượng lớn. System ACE Controller được phát triển mạnh trong các dòng FPGA có thể cấu hình lại (programmable).Điều này làm giảm giá thành so với lúc trước sử dụng PROM và FPGA không thể cấu hình lại được (non-programmable). System ACE Compact Flash là cấu trúc gồm 1 chipset ,một bộ điều khiển (Controller device) và 1 Compact Flash card. Bộ điều khiển ACE controller có khả năng đa giao diện bao gồm các giao diện với CF card, MPU, JTAG cho phép người sử dụng thiết lập các giao diện bên trong FPGA từ đơn giản đến phức tạp.Việc có thể giao diện với CF card hay IBM SVTH: Trần Quang Thuận – Phan Bá Minh. - 47 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Microdrive storage làm cho vùng nhớ chứa cấu hình FPGA (bitstream) lên đến hàng Gbyte.Do đó đây là 1 IP quan trọng trong KIT XUP-II Pro Development System. 3.1.3.1 ACE Flash Memory Card: Xilinx ACE Flash memory card là 1 vùng nhớ Compact Flash device có thể biên dịch với Personal Computer Memory Card International Association ATA (PCMCIA ATA). ACE Flash card ngày nay có nhiều dung lượng như: 128MB, 256MByte, 1 GByte…Trên card có bộ điều khiển giao tiếp Protocol, có khả năng lưu trữ dữ liệu,khả năng phục hồi (retrieval), ECC, khả năng chống treo dữ liệu (defect- hanging data), nguồn cung cấp, điều khiển xung clock. Hình 3-3: Compact Flash Card Compact ACE Flash Card có thể hoạt động trong môi trường PC environment ,trong đó Compact Flash Card được xem như là 1 ổ cứng. Ngoài ra System ACE còn cho phép lập trình hệ thống FPGA trên Compact ACE Flash Card thông qua bộ điều khiển giao tiếp System ACE controller (chức năng Compact Flash to MPU interface). Cấu trúc của Compact ACE Flash File: Capacity Sector/card Head Sector/track Cylinder 128,450,560 31360 2 32 490 256,910,120 62720 4 32 490 SVTH: Trần Quang Thuận – Phan Bá Minh. - 48 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. 3.1.3.2 ACE Controller: Bộ điều khiển ACE Controller quản lý cấu hình của FPGA.Bộ điều khiển cung cấp các giao diện giữa FPGA với các tài nguyên thiết bị có trên Kit XUP.Nó có thể liên kết bên ngoài với nhiều thiết bị FPGA thông qua cổng JTAG với tốc độ giao tiếp 16Mbit/sec. Bộ ACE Controller có 3 giao diện khả năng cấu hình FPGA là:Compact Flash interface,Microprocessor (MPU) interface và Test JTAG thông qua các cổng Compact Flash, MPU và JTAG. Hình 3-4: Các giao diện của Bô ACE Controller Chức năng chính của ACE Controller là giao tiếp với Compact Flash Card thông qua Compact Flash Controller để lưu trữ các file cấu hình FPGA bên trong Compact Flash Card. ACE Controller giao diện với MPU ,giúp MPU giao tiếp với Compact Flash Card, giao tiếp với cấu hình Test JTAG và cấu hình cục bộ. Giao diện Test JTAG được sử dụng khi chúng ta thực thi Boundary_Scan System Bộ điều khiển ACE Controller có 2 nguồn điện cung cấp chính là Core Power supply (VCCL=2.5V~3.3V) và Compact Flash/Test JTAG (VCCH=3.3V) . System ACE reset: SVTH: Trần Quang Thuận – Phan Bá Minh. - 49 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. 3.1.3.3 Giao tiếp System ACE System ACE giao tiếp với Compact Flash Card bao gồm 2 bộ điều khiển là:Compact Flash Controller và Compact Flash Arbiter (toàn quyền).Compact Flash Controller dò tìm thiết bị Compact Flash Card được kết nối với kit XUP, lưu trữ tình trạng và quản lý các tiến trình Bus Cycle, trừu tượng toán học và logic của các lệnh thực thi trên Compact Flash Card.Ngoài ra giao tiếp này còn giúp khởi động mềm (soft-reset), định dạng driver, đọc và ghi sector.Bộ điều khiển Compact Flash Arbiter điều khiển các giao diện tay ba giữa Compact Flash Card, MPU và Test JTAG thông qua buffer dữ liệu của Compact Flash Card Hình 3-5: Hệ thống root dir trong Compact Flash Card Chúng ta xét xem việc 1 file cấu hình FPGA được tạo ra và giao tiếp thông qua bộ ACE Controller: SVTH: Trần Quang Thuận – Phan Bá Minh. - 50 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. file .ACE là tầng thấp nhất của 1 cấu trúc thư mục FPGA Xilinx Software sẽ chuyển dạng bitstream (download.bit) sang file .ACE.Mỗi file .ACE chứa 1 chuỗi đơn các bitstream dùng để cấu hình cho các thiết bị của 1 dòng kit FPGA. Tầng trên của ACE file là các tầng Collection.Một Collection bao gồm 8 file.ACE kết hợp với nhau thành 1 nhóm(group).Tất cả các file .ACE trong 1 Collection có thể được định địa chỉ trong môi trường System ACE và có thể được lưu trữ trong Compact Flash Card.Nhưng tại 1 thời điểm chỉ có 1 Collection được set active. 3.1.3.4 Microprocessor Interface(MPU): Giao tiếp MPU cung cấp 1 phương tiện hữu dụng trong việc quan sát trạng thái và điều khiển bộ System ACE Controller. MPU không cần thiết khi sử dụng các thuật toán thông thường nhưng khi được sử dụng, nó cung cấp một khả năng mạnh mẽ. Giao tiếp này có thể cho phép liên kết giữa các thiết bị có MPU với Compact Flash Card và hệ thống dùng FPGA. Giao tiếp MPU là tập hợp các thanh ghi mà các thanh ghi này cung cấp các phương tiện giao tiếp với hệ thống Logic điều khiển Compact Flash Card, hệ thống Logic điều khiển cấu hình và các nguồn tài nguyên khác trong bộ System ACE Controller. Có 2 điểm quan trọng trong việc sử dụng cổng giao tiếp Microprocessor là: • Để cho bộ Controller được đồng bộ chính xác MPU phải được cấp xung clock • MPU phải tuân theo giản đồ thời gian của hệ thống System ACE. Bộ giao diện MPU đa mục đích có thể update Compact Flash Card, đọc các trạng thái của ACE và truy cập trực tiếp tới cổng cấu hình JTAG thông qua các lệnh ACE Microprocessor. Giao diện này hỗ trợ truyền dữ liệu 8bit hay 16bit. Độ rộng Bus có thể được cấu hình dễ dàng. Tất cả các giao tiếp giữa ACE Controller và Microprocessor bao gồm việc truyền dữ liệu đến hoặc lấy dữ liệu từ các thanh ghi ACE register.Có tất cả 128 thanh ghi địa chỉ 8bit và 64 thanh ghi địa chỉ 16bit. Để cho việc lựa chọn dễ dàng 1 cấu hình mới từ dữ liệu trên Compact Flash Card, giao diện MPU cho phép tái cấu hình FPGA trên hệ thống Kit. SVTH: Trần Quang Thuận – Phan Bá Minh. - 51 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. 3.1.3.5 Test JTAG interface: Giao tiếp Test JTAG hỗ trợ thuật toán IEEE 1149.1 Boundary-Scan trên bộ ACE Controller và trên tất cả các thiết bị FPGA được kết nối với cổng cấu hình JTAG. Giao tiếp này được sử dụng trong việc lập trình và load cấu hình FPGA tại cổng CFGJTAG bằng các công cụ lập trình của Xilinx hay third-party JTAG. Bộ ACE Controller tuân theo hoàn toàn chuẩn IEEE 1149.1 Boundary-Scan thường được gọi dưới tên JTAG. Như hình dưới chúng ta thấy trong đó có bộ TAP (Test Access Port) là bộ giải mã lệnh.Những thanh ghi trong bộ ACE Controller hỗ trợ các lệnh Boundary-Scan. Thêm vào đó bộ ACE Controller còn hỗ trợ 1 thanh ghi nhận dạng tùy ý 32bit (optional identification register). Hình 3-6: Sơ đồ khối của giao diện Test JTAG Pins Descriptions TSTTDI(TDI) Kiểm tra dữ liệu vào TSTTDO(TDO) Kiểm tra dữ liệu ra TSTTMS(TMS) Kiểm tra chọn chế độ TSTTCK(TCK) Kiểm tra xung clock ™ Thanh ghi lệnh IR (Intruction Register): Thanh ghi IR 8bit của bộ ACE Controller được kết nối giữa TDI và TDO trong suốt 1 quá trình thực thi lệnh.Thanh ghi này được load đồng thời với 1 lệnh kết nối SVTH: Trần Quang Thuận – Phan Bá Minh. - 52 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. chuẩn cố định cho việc chuẩn bị thực thi lệnh tiếp theo .Và lệnh kết nối được đưa ra TDO trong khi 1 lệnh khác được đưa vào thanh ghi lệnh thông qua TDI. ™ Thanh ghi Boundary-Scan(Boundary-Scan Register) Thanh ghi Boundary-Scan là thanh ghi chính trong việc kiểm tra dữ liệu ,được dùng để điều khiển và quan sát trạng thái của các chân (pins) thiết bị trong suốt quá trình thực thi lệnh EXTEST và lệnh SAMPLE/PRELOAD ™ Chuỗi bit (Bit Sequence): Một chuỗi bit của thiết bị được lấy từ file Boundary-Scan Description Language (BSDL),được kèm theo khi chúng ta biên dịch 1 project trong ISE. ™ Thanh ghi nhận dạng (Identification register): Thanh ghi nhận dạng còn gọi là IDCODE là một giá trị được gán sẵn bởi nhà sản xuất. IDCODE dùng để xác định loại thiết bị và chế tạo các thiết bị đặc dùng để kiểm tra.Thanh ghi này có 32bit.Nội dung của thanh ghi có thể được kiểm tra bởi các dòng lệnh IDCODE.Thanh ghi IDCODE phù hợp với bất kỳ thành phần nào của hệ thống thông qua JTAG.Thanh ghi này có định dạng nhị phân theo mẫu sau: Version Family Array size Manufacturer Required by 1149.1 0000 0000001 00000000 00001001001 1 ™ Thanh ghi lọc (Bypass Register): Đây là thanh ghi dữ liệu trong bộ ACE Controller.Nó là thanh ghi lọc flip-flop đơn có chức năng truyền dữ liệu trực tiếp theo kiểu nối tiếp từ TDI đến TDO thông qua các lệnh lọc.Thanh ghi này được gán giá trị 0 khi bộ TAP Controller ở trạng thái UPDATE-DR. 3.1.3.6 Các chế độ cấu hình của ACE Controller: Bốn bộ giao diện ACE Controller (Compact Flash Controller interface,MPU interface,Test JTAG(TSTJTAG) interface, configuration JTAG(CFGJTAG)interface) được thiết kế để kết hợp làm các nhiệm vụ sau: • Compact Flash to configuration JTAG(CFGJTAG) setup SVTH: Trần Quang Thuận – Phan Bá Minh. - 53 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Hình 3-7: Lưu đồ truyền dữ liệu từ CF đến JTAG(CFGJTAG) Hình 3-8: Sơ đồ đi dây CF đến JTAG(CFGJTAG) • Compact Flash to Microprosessor (MPU) setup Hình 3-9: Lưu đồ truyền dữ liệu từ CF đến MPU SVTH: Trần Quang Thuận – Phan Bá Minh. - 54 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Hình 3-10: Sơ đồ đi dây từ CF đến MPU • Microprosessor (MPU) to Compact Flash setup Hình 3-11: Lưu đồ truyền dữ liệu từ MPU đến CF • Microprosessor (MPU) to configuration JTAG setup SVTH: Trần Quang Thuận – Phan Bá Minh. - 55 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Hình 3-12: Lưu đồ truyền dữ liệu từ MPU đến CFGJATG Hình 3-13: Sơ đồ đi dây từ MPU đến CFGJTAG • Test JTAG(TSTJTAG) to configuration JTAG(CFGJTAG) setup SVTH: Trần Quang Thuận – Phan Bá Minh. - 56 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Hình 3-14: Lưu đồ truyền dữ liệu từ TSTJTAG đến CFGJTAG (Bypass path) Hình 3-15: Lưu đồ truyền dữ liệu từ TSTJTAG đến CFGJTAG(Boundary-Scan path) SVTH: Trần Quang Thuận – Phan Bá Minh. - 57 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. Hình 3-16: Sơ đồ đi dây từ TSTJTAG đến CFGJTAG 3.1.4 Ethernet adaptor IP Core Ethernet Lite MAC (Media Access Controller) được thiết kế theo chuẩn IEEE 802.3 là chuẩn giao diện độc lập Media (Media Idependent Interface - MII). Ethernet Lite MAC là IP core thiết kế mềm (soft design IP core) cho việc thực thi truyền thông cho từng dòng FPGA của Xilinx.Ngoài nó ra còn hỗ trợ các thiết bị hoạt động ở tầng vật lý (PHY -Physic Layer device) trong công nghiệp và liên kết được khối xử lý bên trong FPGA thông qua Bus OPB (On-chip Peripheral Bus).IP này có khả năng giao tiếp với các đường truyền 10Mbit/sec hoặc 100Mbit/sec. 3.1.4.1 Mô tả chung: Ethernet Lite MAC giao tiếp slave OPB 32bit. Bộ nhớ được định dạng trực tiếp đến các chân I/O, có thể truyền và nhận dữ liệu 2 chiều từ cổng của nó. Giao diện MII thực hiện việc kết nối tầng PHY bên ngoài với tốc độ 10/100Mbit/sec. Có 2 cổng TX, RX với buffer bộ nhớ 2KB độc lập bên trong vùng nhớ IP core làm nhiệm vụ giữ những gói tin vào ra tạm thời. 3.1.4.2 Mô tả chức năng: OPB Ethernet Lite MAC là sự kết hợp của 2 khối IP bên trong: khối giao diện IP (IPIF) và khối IP Ethernet Lite MAC.Trong đó, khối IPIF là tập hợp các giao diện SVTH: Trần Quang Thuận – Phan Bá Minh. - 58 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. với Bus OPB.Các tập hợp con này được lựa chọn tùy theo cấu hình của IPIF nhưng cũng tùy thuộc cấu hình thứ 2 là IP Ethernet Lite MAC. Mặc dù những phần tử giao diện con trên được tách rời trong khối IPIF nhưng IP Ethernet Lite MAC đòi hỏi phải có địa chỉ tham chiếu của chúng Hình 3-17: Lưu đồ khối của OPB Ethernet Lite MAC 3.1.4.3 Giao thức Ethernet (protocol): Dữ liệu truyền thông được gói gọn trong 1 khung (frame).Từng vùng trong khung được truyền từ trái sang phải và từng bit trong vùng cũng được truyền từ trái sang phải. Vùng đầu (premble): Phần đầu của khung được sử dụng cho việc đồng bộ có độ dài 7byte với nội dung 1010101. Nếu như truyền đủ vùng preamble thì việc kết nối được diễn ra và tiếp tục truyền các vùng tiếp theo trong khung. Ngược lại thì sẽ chấm dứt vì không thể kết nối được. Trong quá trình truyền này IP Ethernet Lite MAC sẽ tự động chèn preamble vào khung. Vùng khởi động khung (start frame delimiter): Vùng khởi động này đánh dấu việc khởi động 1 khung và có giá trị 10101011.Khi khung truyền đủ vùng khởi động khung thì việc kết nối được diễn ra và SVTH: Trần Quang Thuận – Phan Bá Minh. - 59 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. tiếp tục truyền các vùng tiếp theo trong khung. Ngược lại thì sẽ chấm dứt vì không thể kết nối được. Tín hiệu nhận giá trị từ tầng PHY (RX-DV) có thể được nhận dạng trong vùng preamble hay cũng có thể được nhận dạng trong vùng khởi động khung Vùng địa chỉ đích (Destination address field): Địa chỉ đích trong khung có độ dài 6byte.Trong đó byte đầu tiên sẽ xác định địa chỉ đích là loại địa chỉ gì: (‘0’)-individual/unicast hoặc (‘1’)-group/multicast. Địa chỉ Broadcast (tất cả các bit trong vùng có giá trị là 1) là 1 địa chỉ multicast có tất cả các đích đến trong vùng LAN cục bộ. IP Ethernet Lite MAC hỗ trợ việc truyền thông và chấp nhận các gói tin dạng unicast hoặc Broadcast. Vùng địa chỉ nguồn(source address field): Có độ dài 6byte. Vùng kiểu và độ dài(Type/Length field): Vùng này có độ dài là 4byte. Giá trị chiều dài (length) sẽ cho biết số byte trong vùng dữ liệu.Giá trị này sẽ không cho biết số byte các vùng khác tiếp theo của vùng dữ liệu trong khung. Giá trị này được tham chiếu theo chuẩn IEEE 802.3 Giá trị kiểu (type) được định nghĩa theo Ethernet protocol và được tham chiếu theo chuẩn IEEE 802.3 Độ dài tối đa của vùng dữ liệu là 1500byte do đó giá trị của vùng kiểu và độ dài là 05DC Hex.IP Ethernet Lite MAC cho không cho phép chúng ta can thiệp vào vùng kiểu và độ dài mà mặc định theo chuẩn IEEE 802.3 Vùng dữ liệu (data): Vùng dữ liệu có độ dài 0Byte đến 1500Byte. Vùng thêm vào (pad): Vùng này được sử dụng để đảm bảo khung có ít nhất 64byte độ dài. Do đó, nếu vùng data là 0 byte thì vùng pad có độ dài là 46byte. Vùng FCS: Vùng FCS có độ dài là 4 byte .Giá trị của FCS được tính toán tùy theo giá trị của vùng địa chỉ đích, vùng đại chỉ nguồn, vùng kiểu và độ dài, vùng thêm vào. FCS sử dụng 32bit CRC (Cyclic Redundancy Check) để kiểm tra dư thừa với công thức sau: SVTH: Trần Quang Thuận – Phan Bá Minh. - 60 - Nghiên cứu Linux trên hệ thống nhúng và ứng dụng. G(x)=x32+x26+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1 Những bit của CRC sẽ được thế vào trong vùng FCS với các phần tử x31,x30,…,x1,x0 IP Ethernet Lite MAC sẽ tính toán với CRC. Giá trị tính toán này sẽ được qui đổi để kiểm tra việc đồng nhất độ dài dữ liệu được truyền đi hay nhận vào trong từng chu kỳ xung clock truyền/nhận Hình 3-18: Khung truyền dữ liệu trên Ethernet Chú ý: Theo chuẩn IEEE 802.3 thì cứ sau 96bit truyền phải có 1 thời gian trì hoãn như sau: 9.6uS đối với 10Mhz và 0.96uS đối với 100Mhz. 3.1.4.4 Chế độ Half-Duplex và Full-Duplex: Chế độ Half-Duplex: Khi không có sự truyền thông, IP Ethernet Lite MAC sẽ quan sát Bus OPB chờ tín hiệu CRS, tín hiệu gửi khung hay tín hiệu nhận khung từ tầng PHY bên ngoài.Tín hiệu CRS là tín hiệu báo Busy OPB Bus (CSR=’1’).Ở chế độ này ,OPB Bus sẽ chia sẻ đường truyền Bus với IP Ethernet Lite MAC. Sau khi Bus đã thông (CSR=’0’), IP Ethernet Lite MAC sẽ bắt đầu khởi động chương trình Timing Interface Gap của mình. Tiếp theo là truyền các gói khung ra tầng PHYvà sau đó sẽ reset bộ định thời của mình. Chế độ Full-Duplex: Full-Duplex không sử dụng tín hiệu từ tầng PHY bên ngoài vì Bus

Các file đính kèm theo tài liệu này:

  • pdfNGHIEN CUU LINUX TREN HE THONG NHUNG VA UNG DUNG.pdf