Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 148 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
148
Dung lượng
2,36 MB
Nội dung
Trang i LỜI CẢM ƠN Em xin trân trọng gửi lời cám ơn chân thành tốt đẹp đến: Thầy Phạm Tường Hải, người tận tâm, nhiệt tình hướng dẫn cung cấp tài liệu cần thiết cho em suốt thời gian làm luận văn Các Thầy khoa Công nghệ thông tin, đặc biệt Thầy Dương Tuấn Anh, Thầy Lê Ngọc Minh bảo phương hướng cho em lúc tìm nhận luận văn giúp đỡ tận tình để em thực luận văn Và xin cảm ơn bạn sinh viên khoa Công nghệ thông tin nhóm thí nghiệm “Hệ thống nhúng T-Engine”, bạn Nguyễn Hoàng Anh, Nguyễn Phạm Anh Khoa bạn Vũ Tuấn Thanh tơi tìm hiểu phần mềm ứng dụng T-Engine góp ý chương trình ứng dụng Calculator Cuối cùng, biết ơn bố mẹ chị chăm lo, cám ơn đồng nghiệp, bạn bè ủng hộ tơi hồn thành luận văn Tp Hồ Chí Minh, tháng 08 năm 2005 Trang ii TÓM TẮT Luận văn giới thiệu hệ thống nhúng T-Engine, hệ thống nhúng có tính mở, chuẩn hóa tảng tốt để phát triển hệ thống nhúng thời gian thực (Real-time Embedded Systems) T-Engine bao gồm phần cứng chuẩn hóa (bo mạch T-Engine) hệ điều hành thời gian thực (T-Kernel) Dự án T-Engine đưa giáo sư Ken Sakamura, đại học Tokyo, với mục đích tiêu chuẩn hóa tảng phát triển cho hệ thống nhúng Nó bao gồm việc hồn chỉnh cấu hình phần cứng môi trường phát triển, bao gồm phân phối cung cấp khả chuyển đổi thành phần phần mềm Luận văn trình bày lịch sử, nguồn gốc phát triển thành tựu đạt T-Engine Đồng thời trình bày vấn đề yếu để người đọc tiếp cận hệ thống nhúng T-Engine cách nhanh nhất, hiểu cấu trúc phần cứng, kiến trúc phần mềm phát triển ứng dụng nhúng đơn giản Cụ thể trình bày quy trình phát triển ứng dụng nhúng đơn giản máy tính tay hệ thống nhúng T-Engine/SH7760 hãng Personal Media Corporation Trang iii ABSTRACT My final thesis presents T-Engine, open standardized development platform for real-time embedded systems It is composed of standardized hardware (T-Engine platform) and standard real-time kernel (T-Kernel) The T-Engine project was proposed by Professor Ken Sakamura (http://tron.um.u-tokyo.ac.jp/) from The University of Tokyo It was launched with the aim of standardizing the development platform of embedded systems This includes improvements to the hardware configuration and the development environment, plus distribution and portability of software components The thesis would elaborate the history of T-Engine, the generations of its development and its achievements It also gives some most important parts of software, hardware architecture and software development procedures And more specifically, a simple application development procedure will be shown, a Calculator, developed on T-Engine/SH7760 development kit of Personal Media Corporation (http://www.personal-media.co.jp/welcome-e.html) Trang iv Mục lục LỜI CẢM ƠN i TÓM TẮT ii ABSTRACT iii Chương 1: Giới thiệu Chương 2: Các cơng trình liên quan Chương 3: Các lý thuyết 3.1 Các vấn đề hệ thống nhúng 3.1.1 Phần cứng 3.1.2 Phần mềm (ứng dụng nhúng) .8 3.1.3 Tổng thể 3.2 Hệ điều hành thời gian thực 10 Chương 4: Giới thiệu T-Engine 14 4.1 T-Engine gì? 14 4.2 Kiến trúc T-Engine 15 4.2.1 Phần cứng T-Engine: 16 4.2.2 Kiến trúc phần mềm T-Engine: 16 4.2.3 Phần mềm ứng dụng T-Engine: .18 4.3 T-Kernel 19 4.3.1 Các đặc tính T-Kernel 19 4.3.2 Quản lý động nguồn lực .19 4.3.3 Quản lý nhớ T-Kernel 20 4.3.4 Các mức độ bảo vệ nhớ .21 4.3.5 Quản lý nhớ ảo 22 4.3.6 Tiến trình phát triển ứng dụng 22 Chương 5: T-ENGINE/SH7760 23 5.1 Giới thiệu: 23 Cấu hình hệ thống 24 5.2.1 Hình dạng 24 5.2.2 Kết nối hệ thống 27 Chương 6: Các đặc tả T-Engine/SH7760 31 6.1 Đặc tả T-Monitor 31 6.1.1 Các hàm hệ thống .31 6.1.2 Các hàm debugging 32 6.1.3 Các chi tiết khởi động hệ thống 35 6.2 Đặc tả T-Kernel .36 6.2.1 Một số thuật ngữ 37 6.2.2 Trạng thái task qui luật định thời .38 6.2.3 Các trạng thái hệ thống 44 6.2.4 Đối tượng 48 6.2.5 Bộ nhớ .48 6.3 Đặc tả giao tiếp trình điều khiển thiết bị 51 6.3.1 Những khái niệm 51 Trang v 6.3.2 Giao tiếp ứng dụng 54 6.4 Thiết bị hiển thị .59 6.5 Thiết bị nhập liệu 64 Chương 7: Những hàm cung cấp T-Kernel 70 7.1 Những đặc tả chung T-Kernel 70 7.1.1 Kiểu liệu 70 7.1.2 Các hàm system call 72 7.2 Các hàm chức T-Kernel/OS 77 7.2.1 Quản lý Task 77 7.2.2 Đồng Task-Dependent 77 7.2.3 Xử lý ngoại lệ Task 78 7.2.4 Đồng giao tiếp .79 7.2.5 Đồng giao tiếp mở rộng 80 7.2.6 Quản lý Memory Pool 86 7.2.7 Quản lý thời gian 87 7.2.8 Quản lý ngắt 88 7.2.9 Quản lý hệ thống .88 7.2.10 Hệ thống 88 7.3 Các hàm chức T-Kernel/SM 89 7.3.1 Quản lý nhớ hệ thống 89 7.3.2 Quản lý không gian địa .91 Chương 8: Phát triển ứng dụng nhúng .95 T-Engine/SH7760 .95 8.1 Tổng quan ứng dụng T-Engine/SH7760 .95 8.2 Các loại phần mềm phát triển [6] .97 8.3 Các thủ tục phát triển phần mềm 98 8.3.1 Cài đặt môi trường phát triển GNU cho T-Engine 98 8.3.2 Khởi động T-Engine .100 8.3.3 Tạo đĩa làm việc 100 8.3.4 Tạo đĩa khởi động 102 8.3.5 Cập nhật đĩa ROM 102 8.3.6 Viết chương trình ứng dụng 103 8.4 Chi tiết khởi động hệ thống 103 8.4.1 Các tập tin hệ thống: .103 8.4.2 Qui trình khởi động hệ thống 104 Chương 9: Phát triển ứng dụng nhúng Calculator 106 9.1 Mục đích, yêu cầu 106 9.2 Mơ hình đề nghị 106 9.3 Giải pháp thực .107 9.3.1 Phân tích tốn 107 9.3.2 Hiện thực hàm main 107 9.3.3 Hiện thực việc hiển thị kết .108 9.3.4 Hiện thực việc nhập liệu 110 Trang vi 9.3.4 Hiện thực chương trình 111 9.3.5 Biên dịch chạy thử chương trình 112 Kết luận 115 Tài liệu tham khảo 116 Phụ lục A: Môi trường phát triển GNU 117 A.1 Tổng quan .117 A.2 Cài đặt môi trường phát triển GNU cho T-Engine .117 A.2.1 Cài đặt: 117 A.2.2 Cập nhật lại biến môi trường: 118 A.3 Rebuilding môi trường phát triển GNU .119 A.3.1 Rebuilding binutils .119 A.3.2 Rebuiding gcc 120 A.3.3 Rebuilding gdb .120 A.4 Cài đặt môi trường phát triển (Cygwin) .121 A.4.1 TERA_TERM 121 A.4.2 Cygwin 122 A.5 Makefile 129 Phụ lục B: Debug chương trình GDB .131 B.1 Giới thiệu: .131 B.2 Sử dụng GDB 132 B.2.1 Chuẩn bị 132 B.2.2 Chuẩn bị thiết bị phần cứng máy chủ host 132 B.2.3 Chuẩn bị cho chương trình định dạng 133 B.2.4 Debug GDB 136 B.3 Lưu ý debug GDB 139 Trang vii Danh mục hình vẽ Hình 3.1: Sơ đồ khối hệ thống nhúng tổng quát .6 Hình 3.2: Khối hệ thống nhúng Hình 3.3: Sơ đồ khối xử lý trung tâm .7 Hình 3.4: Quá trình xây dựng ứng dụng nhúng .8 Hình 3.5: Kiến trúc hệ thống nhúng thời gian thực .11 Hình 3.6: Năm nhóm dịch vụ mà nhân hệ điều hành thời gian thực cung cấp .12 Hình 4.1: Kích thước T-Engine 15 Hình 4.2: Kiến trúc phần mềm T-Engine 17 Hình 4.3: Các kiểu phần mềm ứng dụng T-Engine [6] 18 Hình 4.4: Không gian nhớ task không gian nhớ chia sẻ .21 Hình 4.5: Tiến trình phát triển ứng dụng nhúng 22 Hình 5.1: Hình dạng T-Engine/SH7760 24 Hình 5.2: Mặt trước bo mạch LCD 25 Hình 5.3: Mặt sau bo mạch LCD 25 Hình 5.4: Mặt trước bo mạch CPU 26 Hình 5.5: Mặt sau bo mạch CPU 26 Hình 5.6: Bo mạch debug 27 Hình 5.7: Bo mạch giao tiếp I/O 27 Hình 5.8: Kết nối hệ thống 28 Hình 5.9: Chân connector nối tiếp CN1 28 Hình 5.10: Kết nối nguồn điện 29 Hình 5.11: Kết nối bo mạch debug 30 Hình 5.12: Kết nối EPROM 30 Hình 6.1: Vị trí T-Kernel 36 Hình 6.2: Sơ đồ chuyển trạng thái task .41 Hình 6.3: Thứ tự thực thi trạng thái khởi tạo 42 Hình 6.4: Thứ tự thực thi sau task B chuyển sang trạng thái RUN 43 Hình 6.5: Thứ tự thực thi sau task B chuyển sang trạng thái WAIT .43 Hình 6.6: Thứ tự thực thi task B giải phóng khỏi trạng thái WAIT 44 Hình 6.7: Phân loại trạng thái hệ thống 45 Hình 6.8: Interrupt lồng trì hỗn q trình dispatching 47 Hình 6.9: Khơng gian địa 49 Hình 6.11: Các giao tiếp trình điều khiển thiết bị từ đặc tả T-Kernel 51 Hình 6.12: Khối thiết bị LCD [11] 60 Hình 6.13: Cấu trúc trình điều khiển KBPD [11] 65 Hình 6.14: Cơ chế chuyển đổi keycode có nhiều bàn phím [11] .65 Hình 7.1: Cách thức hoạt động thường trình hỗ trợ ngơn ngữ cấp cao 77 Hình 7.2: Định dạng thông điệp mailbox 80 Hình 7.3: Đồng việc giao tiếp cách sử dụng Message buffer 83 Hình 7.4: Hoạt động rendezvous port .86 Hình 7.5: Hệ thống T-Kernel 89 Trang viii Hình 8.1: Cấu trúc phần mềm T-Engine/SH7760 kit [6] .95 Hình 8.2: Sự chuyển đổi IMS, CLI, T-Monitor shutdown mode [11] 97 Hình 8.3: Thiết lập bit DIP switch .100 Hình 9.1: Ứng dụng Calculator Microsoft Windows .106 Hình 9.2: Quá trình gọi hàm T-Kernel .108 Hình 9.3: Quy trình sử dụng thiết bị SCREEN .109 Hình 9.4: Quy trình sử dụng thiết bị kbdp 110 Hình 9.5: Sơ đồ hoạt động chương trình Calculator 112 Trang ix Danh mục bảng Bảng 1.1: Các sản phẩm có tích hợp hệ thống nhúng .1 Bảng 4.1: Đặc tả cấu hình phần cứng T-Engine µT-Engine [1] 16 Bảng 4.2: Các hàm chức thành phần T-Kernel 19 Bảng 4.3: Cách sử dụng mức độ bảo vệ, mức độ thực thi 21 Bảng 5.1: Các kit phát triển T-Engine PMC [7] 23 Bảng 5.2: Các tín hiệu chân connector CN1 29 Bảng 6.1: Phân biệt chuyển trạng thái “invoking task” task khác 41 Bảng 6.2: Các mức độ bảo vệ nhớ 50 Bảng 6.3: Các chế độ mở đồng thời cho phép .55 Bảng 6.3: Các kiểu mask loại kiện 68 Bảng 8.1: Các chế độ qui định thứ tự khởi động hệ thống .102 Trang Chương 1: Giới thiệu “Hệ thống nhúng” (Embedded System) thuật ngữ gần hay sử dụng tài liệu kỹ thuật Tuy vậy, hệ thống nhúng khơng phải kỹ thuật mới, hình thành từ hội tụ nhiều ứng dụng kỹ thuật khác điện tử dân dụng, viễn thơng, điều khiển tự động… sử dụng khả tính tốn vi xử lý Một cách đơn giản, thiết bị sử dụng vi xử lý hoạt động tự động hệ thống nhúng Hệ thống nhúng xây dựng trước hết để thực chức riêng biệt, thực số điều khiển định công việc, lãnh vực thay cho máy vi tính Ngồi ra, hệ thống nhúng cịn có khả hoạt động tự động, thực công việc (đã lập trình sẵn) tùy theo tác động mơi trường bên ngồi Con người khơng cần phải trực tiếp điều khiển hoạt động toàn hệ thống Và ngày nay, phát triển mạnh kỹ thuật vi điện tử, mạch tích hợp, hệ thống nhúng ngày sử dụng nhiều giá thành rẻ, kích thước nhỏ (nhỏ nhiều lần so với máy tính cá nhân), hoạt động hiệu quả, xác, có độ bền cao Ta xem bảng sau để thấy sản phẩm có hệ thống nhúng tích hợp đó: Đồng hồ báo thức Máy trả lời tự động Thẻ thông minh Máy rút tiền tự động Máy in Máy nghe nhạc Máy quay phim Máy lạnh Máy điện thoại Máy trò chơi Modem Tivi Radio kỹ thuật số Lị vi sóng Máy chụp hình Máy giặt Bảng 1.1: Các sản phẩm có tích hợp hệ thống nhúng Người sử dụng biết sản phẩm có vi xử lý, số linh kiện điện tử khác kèm theo phần mềm điều khiển hoạt động thiết bị hình thành nên cơng dụng sản phẩm Cũng giống máy vi tính cá nhân, hệ thống nhúng hoạt động thiếu phần mềm điều khiển, phần mềm gọi phần mềm nhúng (embedded software) Cũng phần cứng hệ thống nhúng, phần mềm nhúng thường thiết kế riêng cho hệ thống nhúng kết hợp hoạt động chặt chẽ với Thông thường để xây dựng hệ thống nhúng, phải xây dựng tảng phần cứng trước (theo yêu cầu cụ thể, cho công việc khác cần phần cứng khác nhau), sau xây dựng phần mềm điều khiển phù hợp với phần cứng Quá trình địi hỏi nhiều thời gian, việc lập trình phần mềm phụ thuộc nhiều vào phần cứng ngơn ngữ lập trình mà phần cứng hỗ trợ Tuy vậy, điều không làm giảm phát triển mạnh mẽ hệ thống nhúng Bởi vì, có nhiều nhà sản xuất cung cấp vi xử lý đa năng, thông dụng, mạnh, rẻ tiền; cung cấp công cụ hỗ trợ cho việc lập trình, làm giảm đáng kể thời gian viết mã chương Hệ thống nhúng T-Engine Trang 125 Trước truyền nhận chương trình T-Kernel sang T-Engine, cần phải tạo đĩa làm việc (work disk) hay khởi động CF card (pca) USB (uda) Thư mục chứa ví dụ chương trình T-Kernel /usr/local/te/kapple/, sau tạo chương trình nên chứa thư mục Compile chương trình mẫu ví dụ có tên sample: $ cd /usr/local/te/kappl/drawsamp/sh7760 $ gmake Phụ lục A: Môi trường phát triển GNU Hệ thống nhúng T-Engine Trang 126 Khi biên dịch cửa sổ Tera Term có kết sau: Sau biên dịch, ta chọn menu “File Ỉ New conecction” giống thao tác phần kết nối với T-Engine Nếu T-Engine khởi động từ USB hay CF card (bạn tạo đĩa khởi động) bỏ qua lệnh att mà làm việc thư mục /SYS, T-Engine khởi động từ ROM phải tạo đĩa làm việc WORK thực doạn lệnh sau cửa sổ “Tera term – COM1 VT” [/SYS] % att pca0 A [/SYS] % cd /A (hoặc uda0) Phụ lục A: Môi trường phát triển GNU Hệ thống nhúng T-Engine Trang 127 Chép chương trình vào đĩa làm việc [/SYS] % recv –d sample Lựa chọn –d lệnh recv dùng để ghi đè lên chương trình tên Bây CLI chờ nhận chương trình, vào menu “File” Ỉ “Tranfer” Ỉ “XMODEM” Ỉ “Send” Phụ lục A: Môi trường phát triển GNU Hệ thống nhúng T-Engine Trang 128 Chọn tập tin chương trình muốn gửi: Sau hộp thoại truyền nhận hiển thị: Ghi chương trình từ đĩa làm việc lên ROM sử dụng lệnh lodspg CLI [/SYS] % lodspg sample Phụ lục A: Môi trường phát triển GNU Hệ thống nhúng T-Engine Trang 129 Để kết thúc thực thi chương trình sử dụng lệnh unlspg [/SYS] % unlspg (số bên [ ] SYSPRG…[7]) Để tắt T-Engine [/SYS] % exit [/IMS]% exit A.5 Makefile Khi viết chương trình nhỏ, thường lập trình viên biên dịch lại toàn mã nguồn sau chỉnh sửa đôi chút tập tin gốc Tuy nhiên với chương trình lớn, số vấn đề phát sinh sử dụng cách biên dịch lại toàn Thời gian để thực công đoạn sửa mã – biên dịch lại- kiểm tra tăng lên lớn Ngay lập trình viên kiên nhẫn cố gắng tránh biên dịch lại tập tin khơng có chỉnh sửa Chúng ta cần biên dịch lại tập tin có bổ sung hay sửa đổi đủ Để giải vấn đề GNU có cung cấp cho cơng cụ make, chương trình đảm bảo tập tin có chỉnh sửa biên dịch lại mà thơi Trình make khơng dùng phục vụ cho việc biên dịch chương trình mà cịn sử dụng để tạo tập tin kết xuất từ nhiều tập tin nguồn khác Make chứa đựng macro để gọi trình xử lý văn sử dụng cho mục đích cài đặt chương trình Tuy nhiên, sử dụng lệnh gmake để biên dịch cho chương trình (khơng có khác biệt gmake make, nhiên phụ thuộc vào phiên GNU mà hệ thống có mà dùng gmake hay make) Mặc dù trình bạn thấy gmake có chứa nhiều lệnh điều khiển nội thân khơng biết làm cách để xây dựng ứng dụng hộ bạn Bạn Phụ lục A: Môi trường phát triển GNU Hệ thống nhúng T-Engine Trang 130 phải tạo tập tin chứa thông tin hướng dẫn trình gmake cách ứng dụng bạn xây dựng biên dịch Trên UNIX Linux, tập tin thường mang tên Makefile Tập tin Makefile thường nằm thư mục gốc với nơi chứa mã nguồn cần biên dịch dự án Bạn có nhiều tập tin Makefile khác Thực tế dự án bạn lớn bạn tạo Makefile với nhiều biên dịch khác Sự kết hợp trình gmake tập tin Makefile công cụ mạnh để bạn quản lý dự án Không quản lý mã nguồn biên dịch dự án, gmake dùng để sinh tài liệu hướng dẫn, cài đặt tháo bỏ chương trình khỏi hệ điều hành Linux Trình gmake thân có nhiều tùy chọn có tùy chọn thơng dụng là: -k tùy chọn yêu cầu make ‘cứ tiếp tục’ lỗi phát sinh thay phải dừng trình xử lý lỗi -n tùy chọn yêu cầu gmake in thao tác mà thực không thực thực thi kết -f tùy chọn cho phép bạn định tên tập tin Makefile cần diễn dịch trình gmake Thơng thường khơng có tùy chọn –f trình gmake tìm tập tin mang tên makefile hay Makefile thư mục hành nơi bạn gõ lệnh make Ví dụ: $ gmake tương đương với $gmake Makefile Trên T-Engine, để xây dựng chương trình ứng dụng cụ thể ta không cần phải xây dựng tập tin makefile mà cần chỉnh sửa nội dung makefile có sẵn Sau dẫn cần phải thay đổi tập tin makefile - Tên tập tin thực thi đặt TARGET = Những tập tin source chương trình đặt SRC = … (chú ý: tập tin khoảng trắng cần file.c, không cần file.h) - Nếu muốn thêm thư viện khác thêm LDLIBS = … Phụ lục A: Môi trường phát triển GNU Hệ thống nhúng T-Engine Trang 131 Phụ lục B: Debug chương trình GDB B.1 Giới thiệu: Tất phần mềm chứa đựng lỗi Thơng thường 100 dịng lệnh có khoảng đến dịng lệnh bị lỗi (2% đến 5%) Các lỗi thường gặp phân loại sử dụng số phương pháp chung để loại bỏ chúng sau: - Lỗi đặc tả: Nếu chương trình từ đầu đặc tả sai chúng khơng hoạt động theo u cầu điều tất yếu Lập trình viên giỏi giới viết chương trình sai với ý tưởng người dùng Do mà trước bắt tay vào lập trình (hay thiết kế) bạn cần phải hiểu rõ mục đích mà chương trình phải thực - Lỗi thiết kế: Chương trình cho dù kích thước nhỏ cần phải thiết kế Thường có chương trình bắt đầu việc bạn ngồi vào máy gõ lệnh chạy tốt Hãy dành thời gian để nghĩ xem chương trình bạn cần xây dựng theo cách nào, cấu trúc liệu cần dùng đến chúng sử dụng sao? Nếu lỗi thiết kế xảy làm cho bạn phải ngồi viết lại tồn chương trình - Lỗi viết mã: Dĩ nhiên người gõ sai lệnh Tuy nhiên, trình biên dịch đủ sức bắt lỗi cú pháp bạn lo lắng vấn đề Có số trình thơng dịch khơng bắt lỗi bạn soạn thảo, lỗi phát sinh chương trình chạy Đây vấn đề cần quan tâm Lỗi viết mã khó bắt lỗi thuộc logic chương trình Ví dụ vịng lặp vơ tận khơng có điều kiện thốt, lỗi đánh số mảng vượt phạm vi cho phép Quá trình gỡ lỗi chương trình thực cách theo dõi trình hoạt động chương trình cơng cụ tự động Thường trình debugger kèm theo trình biên dịch thực cơng vịêc Chương trình bạn biên dịch mã nhị phân chạy chương trình bình thường Tuy nhiên, trình biên dịch thêm số thơng tin để trình bắt lỗi debugger dựa vào hướng dẫn thực thi chương trình theo yêu cầu tương tác bạn Một chương trình nhị phân muốn thêm vào thơng tin gỡ lỗi, bạn biên dịch với tùy chọn –g (đối với trình biên dịch gcc) Chúng ta xử dụng trình gỡ lỗi gdb GNU để thực thi bắt lỗi chương trình nhị phân biên dịch với tùy chọn – g Để tìm lỗi cho chương trình, bắt đầu trình biên dịch cho chương trình với chế độ debug, ví dụ cần debug chương trình ex_bug1 $ gcc debug1.c –g –o ex_bug1 $ gdb ex_bug1 Bạn tương tác với gdb từ dấu nhắc chương trình Và sử dụng lệnh sau gdb: run (r) Thực thi chương trình debug gặp breakpoint Phụ lục B: Debug chương trình GDB Hệ thống nhúng T-Engine Trang 132 break (b) num Thiết lập breakpoint hàng thứ num delete break num Xóa breakpoint thứ num disable break num Tạm thời vơ hiệu hóa điểm dừng enable break num Sử dụng lại breakpoint bị vơ hiệu hóa help breakpoint Xem lệnh chi tiết breakpoint info breakpoint Xem thông tin breakpoint có chương trình backtrace Dị vết stack, dùng lệnh để xem lại bước mà chương trình đến lỗi cách lần theo vết stack nơi lưu chứa lời gọi hàm trị trả hàm print j In nội dung biến hay biểu thức Để in giá trị mảng ta làm tương tự print a[0]@5 Với @5 số lượng phần tử cần in display In giá trị mảng chương trình thực thi tới breakpoint list linenum In linenum dịng code từ vị trí tại, khơng rõ số dịng gdb in số lượng dịng định cont (c) Tiếp tục thực thi chương trình gặp breakpoint next (n) Thực thi dòng lệnh commands Thực thi số lệnh định gặp breakpoint quit Thoát khỏi gdb B.2 Sử dụng GDB B.2.1 Chuẩn bị Việc sử dụng GDB môi trường phát triển T-Engine mô tả sau GDB sử dụng hàm T-Monitor taget, target chuyển điều khiển cho TMonitor quyền điều khiển chuyển qua GDB Địa chương trình debug phải đuợc thiết lập thời gian liên kết Thơng thường chương trình T-Kernel-based có định dạng tái định vị, địa chương trình xác định lúc nạp vào kit Vì nguyên nhân mà chương trình phải liên kết sử dụng địa luận lý cố định cho debug B.2.2 Chuẩn bị thiết bị phần cứng máy chủ host Kết nối T-Engine với máy chủ sử dụng giao tiếp RS-232C Tạo tập tin khởi tạo cho GDB Khi GDB thực thi nạp tập tin gdbinit thư mục hành tập tin khởi động Cấu hình tập tin sau: set remotebaud 115200 target tmon_sh4 /dev/ttyS0 directory : /src • set remotebaud 115200: tốc độ giao tiếp với thiết bị cần debug Phụ lục B: Debug chương trình GDB Hệ thống nhúng T-Engine Trang 133 • target tmon_sh4 /dev/ttyS0: mơ tả monitor đích Trong Linux /dev/ttyS0 tương đương với cổng COM1 Cần lưu ý phải cho cấp quyền đọc ghi cho COM1 • directory : /src: mơ tả thư mục chứa tập tin mã nguồn Chương trình đích phải compile để debug Để xây dựng tập tin thực thi cho debug: $ gmake mode = debug thực thi gmake thư mục sh7760.debug B.2.3 Chuẩn bị cho chương trình định dạng Như phần trình bày, có ba dạng chương trình hoạt động T-Engine Và luận văn này, ứng dụng nhúng Calculator ứng dụng chạy TKernel nên phần trình bày kỹ thuật debug cho chương trình dạng Hai dạng cịn lại, ta tham khảo tài liệu hướng dẫn T-Engine (TEngine/SH7760 development kit – GNU development environment manual) Phần mềm chạy T-Kernel (T-Kernel-based): Phần mềm chạy T-Kernel nạp vào nhớ sử dụng lệnh lodspg CLI hay IMS Lúc không gian hệ thống tự động định vị lại Do địa thiết lập chương trình khác với địa thực nạp debug GDB Khi debug, vào thời điểm liên kết, khoảng địa cung cấp cho phép chương trình nạp vào kit định dạng địa tĩnh.Tập tin chạy target, tập tin có định dạng tương tự tải vào GDB máy chủ để debug $BD/kappl/sample tập tin mẫu sử dụng Đầu tiên ta phải có số sửa đổi cần thiết chương trình cho debug Mục đích việc sửa đổi quyền điều khiển chuyển cho T-Monitor chương trình bắt đầu.Do GDB sử dụng hàm T-Monitor cho debug $BD/kappl/sample/src/main.c Thêm dòng sau vào vào đầu tập tin Điều cần thiết để sử dụng tm_monitor() #ifdef DEBUG #include #endif Thêm lệnh sau vào main() trước dòng lệnh #ifdef DEBUG tm_monitor(); #endif Mục đích để chương trình chuyển quyền điều khiển cho T-Monitor sau thực thi Hàm bao #ifdef DEBUG #endif có giá trị debug mode Phụ lục B: Debug chương trình GDB Hệ thống nhúng T-Engine Trang 134 $BD/kappl/sample/src/Makefile Cuối dòng CFLAGS thêm: ifeq ($(mode), debug) LDLIBS += -ltm endif ifeq ($(MACHINE), sh7760) $(TARGET).abs: START ADR = -Wl,-Ttext,0xc0000074 endif Thêm thư viện (libtm.a) cần thiết để sử dụng hàm T-Monitor rõ địa bắt đầu dạng địa tĩnh Mô tả luật tạo tập tin để load target Thêm vào phía trước all: ifeq ($(mode), debug) NOINST = $(TARGET).trg endif Thêm $(NOINST) vào phía cuối all: sau: all: $(ALL) $(NOINST) Thêm luật $(TARGET).trg phía sau luật $(TARGET).abs $(TARGET).trg: $(TARGET).abs cp $< $@ $(STRIP) $@ Thêm $(NOINST) vào clean sau: clean: $(RM) $(OBJ) $(SRC.C) $(INST) $(NOINST) $(DEPS) $BD/kappl/sample/src/.gdbinit_sh4 Tạo tập tin khởi tạo GDB với nội dung sau Chỉnh lại tốc độ giao tiếp T-Engine set remotebaud 38400 target tmon sh4 /dev/ttyS0 directory : /src Các bước chuẩn bị chương trình cho debug: Chuyển đến thư mục chương trình sample devl@pc1:/usr/local/te/$ cd /usr/local/te/kappl/sample Tạo thư mục làm việc cho trình debug sử dụng devl@pc1:/usr/local/te/kappl/sample/$ mkdir sh7760.debug Chuyển đến thư mục làm việc devl@pc1:/usr/local/te/kappl/sample/$ cd sh7760.debug Tạo symbolic link đến Makefile devl@pc1:/usr/local/te/kappl/sample/sh7760.debug/$ ln -s /src/Makefile Phụ lục B: Debug chương trình GDB Hệ thống nhúng T-Engine Trang 135 Tạo symbolic link đến tập tin khởi tạo GDB devl@pc1:/usr/local/te/kappl/sample/sh7760.debug/$ ln -s /src/.gdbinit sh4 gdbinit Chạy make devl@pc1:/usr/local/te/kappl/sample/sh7760.debug/$ gmake Makefile:224: Dependencies: No such file or directory touch Dependencies /usr/local/te/etc/makedeps -r Dependencies main.o /usr/local/te/tool/Linux-i686/sh-unknown-tkernel/bin/gccsh -g -m4 -mno-implicit-fp -ffreestanding -Wall -Wno-format -Wno-main -I/usr/local/te/include -D SH7760 DDEBUG -c /src/main.c -o main.o /usr/local/te/tool/Linux-i686/sh-unknown-tkernel/bin/gccsh -L/usr/local/te/lib/sh7760 -m4 -mno-implicit-fp -r -T /usr/local/te/lib/sh7760/reloc.lnk main.o -lg -ltk -lg -lsvc -ltm -o sample Một đối tượng định dạng tái định vị.Cái không sử dụng suốt trình debug /usr/local/te/tool/Linux-i686/sh-unknown-tkernel/bin/gccsh -specs=specs-tk -L/usr/local/te/lib/sh7760 -m4 -mno-implicit-fp -static -T /usr/local/te/lib/sh7760/static.lnk -Wl,-Ttext,0xc0000074 main.o -lg -ltk -lg -lsvc -ltm -o sample.abs Địa sau link định rõ –Wl,-Ttext,0xc0000074 /usr/local/te/tool/Linux-i686/sh-unknown-tkernel/bin/nm -n sample.abs > sample.map Map file /usr/local/te/tool/Linux-i686/bin/sh-unknown-tkernel-objcopy -O srec srecforceS3 srec-len 32 sample.abs sample.mot Tạo S-format file Nó khơng sử dụng ví dụ cp sample.abs sample.trg Khi make chạy debug mode, thông tin debug thêm vào tập tin chương trình làm tăng kích thước /usr/local/te/tool/Linux-i686/sh-unknown-tkernel/bin/strip strip-unneeded sample.trg Gở bỏ thông tin debug từ truyền tập tin devl@pc1:/usr/local/te/kappl/sample/sh7760.debug/$ Gởi sample.trg đến máy đích lệnh recv CLI, sau nạp chạy chương trình: lodspg sample.trg Sau tm_monitor() thực thi quyền điều khiển chuyển từ máy đích đến T-Monitor, bắt đầu GDB máy chủ Phụ lục B: Debug chương trình GDB Hệ thống nhúng T-Engine Trang 136 B.2.4 Debug GDB Khi target dừng lại lúc T-Monitor vừa khởi động, chạy GDB máy chủ host, xác định tham số truyền cho GDB tên chương trình cần debug (tên đầy đủ gồm đường dẫn) Chú ý: GDB gterm hoạt đồng thời với nhau, phải gterm trước chạy GDB Breakpoint thiết lập vị trí cần thiết để kiểm tra lệnh b (breakpoint) c (continue) tiếp tục thực thi Khi gặp breakpoint, quyền điêu khiển trả lại cho GDB Kết thúc GDB lệnh q (quit) Thông thường debug xây dựng lệnh bt (back trace), p (print), s (step), n (next) Debug chương trình T-Kernel-based: Khởi động máy đích: gắn khởi động disk vào máy đích khởi động với DIPSW1 vị trí OFF Nếu DIP-SW1 ON, khởi động T-Monitor dừng Trong trường hợp đánh lệnh bd pca0 để bắt đầu T-Kernel devl@pc1:/usr/local/te/$ cd /usr/local/te/kappl/sample/sh7760.debug devl@pc1:/usr/local/te/kappl/sample/sh7760.debug/$ /usr/local/te/tool/Linux-i686/etc/gterm -3 -l/dev/ttyS0 Bắt đầu gterm > [/SYS]% recv sample.trg Chuyển chương trình cho debug lệnh “recv filename” CLI Nếu sample.trg tồn tại, thực thi lệnh “recv -d filename “ để overwrite Target: sample.trg [Target: sample.trg: 15236 bytes] * ! (2933.0 bytes/sec) [/SYS]% lodspg sample.trg Thực thi lệnh “lodspg filename” để load chương trình T-Kernel-based vào nhớ TM> q tm_monitor() thêm vào cho debug thực thi, chuyển quyền điều khiển cho TMonitor Thoát gterm > devl@pc1:/usr/local/te/kappl/sample/sh7760.debug/$ /usr/local/te/tool/Linux-i686/bin/sh-unknown-tmonitor-gdb sample.abs Bắt đầu GDB GNU gdb 5.2 Copyright 2002 Free Software Foundation, Inc GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions Type "show copying" to see the conditions There is absolutely no warranty for GDB Type "show warranty" for details This GDB was configured as " host=i686-pc-linux-gnu Phụ lục B: Debug chương trình GDB Hệ thống nhúng T-Engine Trang 137 target=sh-unknown-tmonitor" 0xc0002a2c in tm monitor () Hiển thị source code xung quanh vị trí hành (gdb) l 11 #ifdef DEBUG 12 #include 13 #endif 14 15 EXPORT ER main( INT ac, UB *av[] ) 16 { 17 INT i; 18 19 #ifdef DEBUG 20 tm_monitor(); (gdb) l 21 #endif 22 printf("hello (ac=%d)\n", ac); 23 24 for ( i = 0; i < ac; ++i ) { 25 printf(" av[%d] = '%s'\n", i, av[i]); 26 } 27 28 return E_OK; 29 } (gdb) b 25 Một breakpoint thiết lập dòng 25 Để thiết lập breakpont tập tin khác, đánh lệnh “b sub.c:34” Breakpoint at 0xc00001e0: file /src/main.c, line 25 (gdb) c Continuing from target> hello (ac=1) Breakpoint 1, main (ac=1, av=0x40259188) at /src/main.c:25 25 printf(" av[%d] = '%s'\n", i, av[i]); Sự thực thi dừng breakpoint Source code xung quanh điểm hiển thị (gdb) p i Hiển thị biến i $1 = (gdb) p av[i] av[i] hiển thị $2 = (UB *) 0x40259170 "sample.trg" (gdb) p ac biến ac hiển thị $3 = Phụ lục B: Debug chương trình GDB Hệ thống nhúng T-Engine Trang 138 (gdb) n n (next) tiến đến dòng from target> av[0] = 'sample.trg' 24 for ( i = 0; i < ac; ++i ) { (gdb) n 28 return E_OK; (gdb) p i $4 = (gdb) c Sự thực thi khôi phục c (continue) Continuing from target> SYSPRG sample.trg [6] c0000000 - c0005000 from target> [/SYS]% Khi chương trình debug kết thúc, khơng có kết trả cho GDB Trng trường hợp nhấn Ctrl + C hai lần để hiển thị GDB prompt from target> [/SYS]% [/SYS]% Interrupted while waiting for the program Give up (and stop debugging it)? (y or n)y (gdb) q Thốt GDB q(quit) devl@pc1:/usr/local/te/kappl/sample/sh7760.debug/$ Thơng thường chương trình kết thúc, cịn nhớ Khi GDB thoát Ctrl + C mà breakpoint thiết lập trên, breakpoint định T-Monitor lưu lại Bắt đầu gterm, đến T-Monitor xóa breakpoint devl@pc1:/usr/local/te/kappl/sample/sh7760.debug/$ /usr/local/te/tool/Linux-i686/etc/gterm -3 -l/dev/ttyS0 > Lệnh # chuyển đến T-Monitor [/SYS]% # Liệt kê breakpoint lệnh b T-Monitor TM> b C00001E0 S Xóa breakpoint lệnh bc T-Moniotr TM> bc Trở lại CLI lệnh g T-Monitor TM> g [/SYS]% Thực thi lệnh “regspg” CLI để xác nhận chương trình hệ thống load [/SYS]% ref spg SYSTEM PROGRAM: [ 1] - 0x40208000 - 11 kbpd [ 2] - 0x40213000 - lowkbpd Phụ lục B: Debug chương trình GDB Hệ thống nhúng T-Engine Trang 139 [ 3] - 0x4021b000 - rsdrv [ 4] - 0x40221000 - screen [ 5] - 0x40273000 - 53 unixemu [ 6] - 0xc0000000 - sample.trg Sử dụng lệnh “unlspg load ID” CLI để xóa chương trình T-Kernel-based thường trú nhớ [/SYS]% unlspg Sự thực thi dừng lại tm_moniotor() Khôi phục thực thi lệnh g TMonitor TM> g hello (ac=-1) [/SYS]% B.3 Lưu ý debug GDB • Sự kết thúc session: Khi quyền điều khiển chuyển sang GDB, nhấn q (quit) để GDB Nếu chương trình thực thi tiếp tục cách nhấn c (continue) mà không thiết lập breakpoint, hay chương trình chạy mà khơng qua breakpoint nào, rơi vào vịng lặp vô tận, quyền điều khiển không trả cho GDB dấu nhắc GDB không xuất Trong trường hợp nhấn Ctrl + C hai lần dấu nhắc GDB xuất Sau nhấn q để GDB • Xuất thơng điệp: Để trao đổi thông tin lệnh trạng thái với T-Monitor, GDB sử dụng kết nối giao tiếp nối tiếp T-Engine Dưới điều kiện đó, việc đồng GDB T-Monitor Nếu điều diễn ra, shutdown GDB, khởi động gterm dấu nhắc T-Monitor xuất hiện, khởi động lại GDB • Bước (stepping) điều khiển ngắt quãng (interrupt handler): Khi breakpoint thiết lập interrupt handler chương trình dừng lại breakpoint, stepping cần số thị đặc biệt Điều có nghĩa để kết thúc trình debug interrupt handler, quyền điều khiển phải trả lại máy đích với lệnh continue GDB khơng biết chương trình thực thi hàm thơng thường hay interrupt handler, interrupt handler kết thúc stepping, GDB không làm việc đắn Phụ lục B: Debug chương trình GDB Hệ thống nhúng T-Engine ... trúc phần cứng, quy trình phát triển ứng dụng nhúng phát triển ứng dụng nhúng đơn giản máy tính cầm tay kit phát triển hệ thống nhúng hãng Personal Media Corporation Hệ thống nhúng T-Engine Trang... tiếp cận hệ thống nhúng T-Engine cách nhanh nhất, hiểu cấu trúc phần cứng, kiến trúc phần mềm phát triển ứng dụng nhúng đơn giản Cụ thể trình bày quy trình phát triển ứng dụng nhúng đơn giản... khiển Hệ thống nhúng T-Engine Trang 3.1.2 Phần mềm (ứng dụng nhúng) Khảo sát phần cứng hệ thống nhúng Viết chương trình phần mềm nhúng Kết hợp phần cứng phần mềm Chạy thử kiểm tra, sửa lỗi Hệ thống