Đồ án Thiết kế Hệ thống số
Nhóm 1
BỘ THƠNG TIN VÀ TRUYỀN THƠNG
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
----------
ĐỒ ÁN THIẾT KẾ HỆ THỐNG SỐ
ĐỀ TÀI: “Đồng hồ số hiển thị LCD sử dụng
Beaglebone Black”
Giảng viên hướng dẫn :
Nguyễn Văn Thành
Thành viên:
Trần Cơng Sơn – B17DCDT163
Khương Phú Bình –
B17DCDT1020
Đào Đức Mạnh - B17DCDT120
Lê Văn Hiếu - B17DCDT071
Hệ đào tạo
:
ĐẠI HỌC CHÍNH QUY
Hà Nội - 2021
i
Đồ án Thiết kế Hệ thống số
Nhóm 1
LỜI CẢM ƠN
Đầu tiên, xin được gửi lời cảm ơn đến Ban Giám đốc Học viện Cơng nghệ Bưu
chính Viễn thơng đã tạo ra môi trường rèn luyện, trau dồi kiến thức, kinh nghiệm tốt và
hiệu quả để nhóm có cơ hội phát triển và được cung cấp các hành trang quý giá cho
chun mơn nói riêng và cuộc sống nói chung.
Xin trân trọng cảm ơn thầy Nguyễn Văn Thành đã tận tâm giúp đỡ nhóm thực hiện
đề tài “Đồng hồ số hiển thị LCD sử dụng Beaglebone”. Với những kiến thức và sự hướng
dẫn tận tình, chi tiết của thầy đã giúp đỡ nhóm đề tài rất nhiều điều từ phong cách làm
việc chuyên nghiệp đến những kiến thức chuyên môn từ cơ bản đến chuyên sâu.
Do nghiên cứu phần kiến thức mới cùng với đó là sự hạn chế về kinh nghiệm
nghiên cứu, nên đề tài của nhóm khơng thể tránh khỏi những sai sót, rất mong nhận được
những ý kiến đóng góp của thầy để đề tài được hồn thiện hơn.
Cuối cùng xin kính chúc thầy và gia đình ln thành công và hạnh phúc.
Trân trọng !
Hà Nội, tháng 5 năm 2021.
Nhóm đề tài.
i
Đồ án Thiết kế Hệ thống số
Nhóm 1
MỤC LỤC
LỜI CẢM ƠN ....................................................................................................... i
MỤC LỤC ............................................................................................................ii
DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT ................................................iv
LỜI MỞ ĐẦU ...................................................................................................... 1
CHƯƠNG I: NGHIÊN CỨU TỔNG QUAN ................................................... 2
1.1: Tổng quan về hệ điều hành Linux ............................................................. 2
1.2: Linux kernel ............................................................................................... 4
1.3: Lập trình trên hệ điều hành Linux ............................................................. 6
1.4: Kết luận chương. ........................................................................................ 6
CHƯƠNG 2: NGHIÊN CỨU THIẾT KẾ ĐỒNG HỒ SỐ ............................. 7
SỬ DỤNG BEAGLE BONE .............................................................................. 7
2.1: Linh kiện sử dụng ...................................................................................... 7
2.1.1: Máy tính nhúng Beaglebone Black(BBB) ........................................... 7
2.1.2: LCD 16x2 ............................................................................................ 9
2.2: Cơ sở lý thuyết ......................................................................................... 11
2.2.1: Device driver .................................................................................... 11
2.2.2: Linux kernel module ......................................................................... 12
2.2.3: Giao tiếp giữa tầng User và phần cứng ........................................... 13
2.3: Nghiên cứu thiết kế Đồng hồ số sử dụng Beaglebone Black .................. 14
2.3.1: Môi trường ........................................................................................ 14
2.3.2: Sơ đồ tổng quan hệ thống ................................................................. 16
2.3.3: Thiết kế phần mềm ............................................................................ 17
2.3.4: Thiết kế phần cứng............................................................................ 21
2.4: Kết luận chương ....................................................................................... 22
CHƯƠNG III: ĐÁNH GIÁ KẾT QUẢ .......................................................... 23
3.1: Kết quả ..................................................................................................... 23
3.2: Đánh giá kết quả và hướng phát triển ...................................................... 26
3.2.1: Đánh giá kết quả............................................................................... 26
3.2.2: Hướng phát triển .............................................................................. 26
ii
Đồ án Thiết kế Hệ thống số
Nhóm 1
3.3: Kết luận chương ....................................................................................... 26
KẾT LUẬN ........................................................................................................ 27
TÀI LIỆU THAM KHẢO ................................................................................ 28
iii
Đồ án Thiết kế Hệ thống số
Nhóm 1
DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT
Từ viết tắt
Viết đầy đủ
Giải nghĩa
ADC
Analog-to-Digital
Converter
Bộ chuyển đổi tín hiệu
tương tự sang số
BBB
Beaglebone Black
Tên máy tính nhúng
CPU
Central Processing Unit
Bộ xử lý trung tâm
GCC
GNU Compiler Collection
Bộ trình biên dịch GNU
GPIO
General-purpose
input/output
Cổng ra vào
IDE
Integrated Development
Environment
Mơi trường phát triển tích
hợp
I2C
Inter-Integrated Circuit
Giao thức truyền thơng
I2C
LCD
Liquid Crystal Display
Màn hình lỏng
PC
Persional Computer
Máy tính cá nhân
SSH
Secure Shell
Giao thức mạng kết nối
bảo mật
TCP/IP
Tranmission Control
Bộ giao thức Internet
Protocol/ Internet Protocol
UART
Universal Asynchronous
Receiver/Transmitter
Truyền thông nối tiếp
không đồng bộ
USB
Universal Serial Bus
Chuẩn kết nối tuần tự
trong máy tính
iv
Đồ án Thiết kế Hệ thống số
Nhóm 1
LỜI MỞ ĐẦU
Ngày nay, công nghệ được ứng dụng vào hầu như tất cả các lĩnh vực của cuộc sống.
Trong số đó khơng thể không nhắc tới các hệ thống nhúng, tất cả các thiết bị điện tử,
phương tiện gắn máy hiện tại đều có sự xuất hiện của “nó”. Các hệ thống nhúng dù lớn
hay nhỏ đều cần có 1 bộ não xử lý, đối với các hệ thống lớn có thể xuất hiện rất nhiều
bộ não, nó có thể là vi điều khiển, máy tính nhúng, …
Trong chương trình học hiện tại, Học viện và Khoa Kỹ thuật Điện tử 1 đã đưa vào
rất nhiều kiến thức liên quan dòng vi điều khiển mới và phổ biến hiện tại là dòng ARM32bit. Tuy nhiên, các bài thực hành chỉ dừng lại ở mức độ sử dụng KIT, Module thực
hành bởi có lẽ giá cả của các linh kiện trên phù hợp với hầu hết sinh viên cùng với đó
là tính đơn giản và phổ biến.
Từ mong muốn được ứng dụng các kiến thức đã học vào lập trình ở 1 mơi trường
khác cụ thể là hệ điều hành Linux, nhóm đã quyết định thực hiện đề tài:“Đồng hồ số
hiển thị LCD sử dụng Beaglebone” sử dụng nền tảng hệ điều hành Linux. Dưới sự
hướng dẫn của thầy Nguyễn Văn Thành, kết hợp với những kiến thức được thầy cô
Khoa Kĩ Thuật Điện Tử 1 giảng dạy, nhóm đã hồn thành được đề tài.
Nội dung đề tài bao gồm 3 chương:
-
Chương 1: Nghiên cứu tổng quan.
-
Chương 2: Nghiên cứu thiết kế Đồng hồ số hiển thị LCD sử dụng Beaglebone.
-
Chương 3: Đánh giá kết quả.
Dưới đây nhóm xin trình bày chi tiết các phần trong nội dung của đề tài.
1
Đồ án Thiết kế Hệ thống số
Nhóm 1
CHƯƠNG I: NGHIÊN CỨU TỔNG QUAN
Chương này sẽ trình bày tổng quan về hệ điều hành Linux, tổng quan về tầng
Kernel của Linux và việc lập trình trên tầng User Linux sẽ như thế nào.
1.1: Tổng quan về hệ điều hành Linux
1.1.1: Khái niệm và lịch sử phát triển
Linux là một hệ điều hành (OS) mã nguồn mở. Hệ điều hành là phần mềm quản
lý trực tiếp phần cứng và tài nguyên của hệ thống, như CPU, bộ nhớ và lưu trữ. HĐH
nằm giữa các ứng dụng và phần cứng và tạo các kết nối giữa tất cả phần mềm và các tài
nguyên vật lý thực hiện công việc.
Linux được tạo ra vào năm 1991 bởi Linus Torvalds, một sinh viên tại Đại học
Helsinki. Torvalds đã xây dựng Linux để thay thế mã nguồn mở và miễn phí cho Minix,
một bản sao Unix khác được sử dụng với mục đích chủ yếu về là học thuật. Tên ban
đầu của phần mềm Linux là Freax nhưng quản trị viên của máy chủ Torvalds đã sử dụng
nó để phân phối mã gốc có tên là Linux, theo như cái tên của Torvalds. Sau đó, cái tên
“Linux” ra đời nhờ sự kết hợp của hai cái tên “Freax” và “Linus”.
1.1.2: Cấu trúc của hệ điều hành Linux
Hình 1.1: Cấu trúc tầng hệ điều hành Linux
Hệ điều hành Linux sẽ gồm 2 tầng chính: User space và Kernel space.
2
Đồ án Thiết kế Hệ thống số
-
Nhóm 1
User space: Bao gồm các ứng dụng, phần mềm, tiện ích của người dung và gồm cả các
chương trình thực thi các yêu cầu từ người dùng gửi đến tầng kernel.
-
Kernel space: Là thành phần quan trọng của hệ điều hành, và được ví như trái tim của
HĐH, kernel sẽ chứa các module hay các thư viện để quản lý và giao tiếp giữa phần
cứng máy tính và các ứng dụng. Đây là sẽ là mơi trường mà nhóm em đã lựa chọn lập
trình trong đề tài này.
1.1.3: Cấu trúc cây thư mục của Linux
Khác so với hệ điều hành Windows, hệ điều hành Linux quản lý file theo sơ đồ
cây thư mục. Cụ thể như sau:
Hình 1.2: Cấu trúc cây thư mục trong Linux
-
root: Thư mục cha của tất cả thư mục
-
/bin: Chứa các tập tin thực thi của người dùng
-
/sbin: chứa các tệp tin thực thi của hệ thống. Các lệnh trong này thường liên quan đến
cấu hình hệ thống, chỉ có root hoặc super accout mới có quyền thực thi các lệnh này
-
/etc: Chứa các tập tin cấu hình cần thiết cho tất cả các chương trình và các đoạn mã khời
động, tắt các chương trình đơn.
-
/dev: chứa các tập tin thiết bị đầu cuối hay bất kỳ thiết bị nào gắn vào hệ thống.
-
/proc: chứa các thông tin tiến trình đang chạy.
-
/var: chứa các tập tin mà dung lượng lớn dần theo thời gian sử dụng.
3
Đồ án Thiết kế Hệ thống số
-
Nhóm 1
/tmp: chứa các tập tin tạm được khởi tạo bởi người dùng và hệ thống. Sẽ bị xóa khi hệ
thống khời động lại.
-
/usr: chứa các tập lệnh thực thi, thư viện, tài liệu mã nguồn cho các chương trình của
người dùng.
-
/usr/bin chứa các tập tin thực thi cho các chương trình của người dùng
-
/usr/sbin chứa các tập tin thực thi cho quản trị hệ thống
-
/usr/lib chứa các tập tin thư viện /usr/bin và /usr/sbin
-
/usr/local chứa các chương trình của người dùng mà bạn cài từ mã nguồn
-
/boot: chứa các tập tin của chương trình khởi động máy
-
/lib: chứa các tập tin thư viện hỗ trợ các tập tin thực thi trong /bin và /sbin
-
/mnt: thư mục mount tạm thời, người quản trị hệ thống có thể mount các tập tin hệ thống
-
/srv: dữ liệu dịch vụ máy chủ
1.1.4: Hệ thống quản lý User
Vào khoảng những năm 1970, hệ điều hành chỉ là những chương trình vi điều
khiển thơng thường. Tuy nhiên, Unix khi đấy phát triển 1 khái niệm mới đó là User
trong hệ điều hành. User là 1 đối tượng trong hệ thống, nó được quy định quản lý các
tài nguyên riêng của nó
1.2: Linux kernel
Vào năm 1991, dựa trên UNIX kernel, Linus Torvalds đã tạo ra Linux kernel chạy
trên máy tính của ông ấy. Dựa vào chức năng của hệ điều hành, Linux kernel được chia
làm 6 thành phần:
-
Process management: có nhiệm vụ quản lý các tiến trình, bao gồm các cơng việc:
+ Tạo/hủy các tiến trình.
+ Lập lịch cho các tiến trình. Đây thực chất là lên kế hoạch: CPU sẽ thực thi chương
trình khi nào, thực thi trong bao lâu, tiếp theo là chương trình nào.
+Hỗ trợ các tiến trình giao tiếp với nhau.
+ Đồng bộ hoạt động của các tiến trình để tránh xảy ra tranh chấp tài nguyên.
-
Memory management: có nhiệm vụ quản lý bộ nhớ, bao gồm các công việc:
4
Đồ án Thiết kế Hệ thống số
Nhóm 1
+ Cấp phát bộ nhớ trước khi đưa chương trình vào, thu hồi bộ nhớ khi tiến trình kết
thúc.
+ Đảm bảo chương trình nào cũng có cơ hội được đưa vào bộ nhớ.
+ Bảo vệ vùng nhớ của mỗi tiến trình.
-
Device management: có nhiệm vụ quản lý thiết bị, bao gồm các công việc:
+ Điều khiển hoạt động của các thiết bị.
+ Giám sát trạng thái của các thiết bị.
+ Trao đổi dữ liệu với các thiết bị.
+ Lập lịch sử dụng các thiết bị, đặc biệt là thiết bị lưu trữ (ví dụ ổ cứng).
-
File system management: có nhiệm vụ quản lý dữ liệu trên thiết bị lưu trữ (như ổ cứng,
thẻ nhớ). Quản lý dữ liệu gồm các công việc: thêm, tìm kiếm, sửa, xóa dữ liệu.
-
Networking management: có nhiệm vụ quản lý các gói tin (packet) theo mơ hình
TCP/IP.
-
System call Interface: có nhiệm vụ cung cấp các dịch vụ sử dụng phần cứng cho các
tiến trình. Mỗi dịch vụ được gọi là một system call. Khi một tiến trình cần sử dụng một
dịch vụ nào đó của kernel, tiến trình sẽ gọi một system call. System call cũng tương tự
như các hàm bình thường khác (library call). Chỉ có điều, các library call được cung cấp
bởi các thư viện trong user space, còn các system call được cung cấp bởi kernel.
Hình 1.3: Kiến trúc Linux kernel theo khối
5
Đồ án Thiết kế Hệ thống số
Nhóm 1
1.3 Lập trình trên hệ điều hành Linux
Khác với việc lập trình trên các IDE có tích hợp nhiều chức năng như Editor,
compiler, debug, … Khi lập trình với hệ điều hành Linux chúng ta cần có 1 cơng cụ
biên dịch hỗ trợ để biên dịch để thực thi chương trình. Thường thì sẽ sử dụng GCC để
biên dịch trên hệ điều hành.
Hình 1.4: Quá trình biên dịch chương trình
Quá trình xử lý bắt đầu từ khi nạp file vào hệ thống, trải qua bước tiền xử
lý(Preprocessor) nó sẽ sinh ra được các file .i đã được phân biệt bằng cách đọc header
của file source. Sau đó file .i sẽ được biên dịch thành mã máy(Assemble) và tạo ra file
object(.o). Cuối cùng các file .o sẽ được link lại với nhau(kết hợp với các thư viện) tạo
thành file thực thi(.exe).
1.4: Kết luận chương.
Ở chương I, nhóm đã trình bày tổng quan các vấn đề nổi bật về hệ điều hành
Linux, Linux kernel cũng như cách lập trình cơ bản trên tầng User của hệ điều hành.
Tiếp theo chương II, nhóm sẽ trình bày các nội dụng quá trình nghiên cứu, thiết kế đồng
hồ số sử dụng Beaglebone.
6
Đồ án Thiết kế Hệ thống số
Nhóm 1
CHƯƠNG 2: NGHIÊN CỨU THIẾT KẾ ĐỒNG HỒ SỐ
SỬ DỤNG BEAGLE BONE
Chương này sẽ trình bày chi tiết về cơ sở lý thuyết của dề tài, quá trình thiết kế
phần mềm cũng và phần cứng.
2.1: Linh kiện sử dụng
2.1.1: Máy tính nhúng Beaglebone Black(BBB)
a: Thông tin chung
BeagleBone Black là main Linux sở hữu cấu hình mạnh, kết nối đa dạng, khả
năng mở rộng cao. Bo mạch chủ kích thước 8,6 x 5,3 cm này được trang bị bộ xử
lý ARM Cortex-A8 tốc độ 1GHz (Texas Instruments sản xuất) hỗ trợ tăng tốc đồ họa,
đầu cắm 46 chân cho các kết nối ngoại vi, 2GB bộ nhớ flash tích hợp và bộ nhớ DDR3
dung lượng 512MB. BeagleBone Black cũng được trang bị cổng USB, kết nối Ethernet
và HDMI hỗ trợ độ phân giải 1280 x 1024 pixel. BeagleBone Black sử dụng nguồn điện
vào 5V DC có thể cấp từ cổng USB (cáp USB đi kèm) hay kết nối với các adaptor có
mức điện áp tương ứng.
Cấu hình chi tiết:
-
Vi xử lí AM3358 1GHz ARM® Cortex-A8
-
4GB 8-bit eMMC Onboard Flash
-
3D Graphics Accelerator
-
NEON Floating-Point Accelerator
-
2x Vi điều khiển 32-bit PRU
-
Kết nối:
-
USB Client for power and communications
-
USB Host
-
Ethernet
-
Micro HDMI
-
2x Đầu cắm 46 chân.
7
Đồ án Thiết kế Hệ thống số
Nhóm 1
Tương thích với các hệ điều hành:
-
Android
-
Ubuntu
-
Cloud9 IDE on Node.js with BoneScript
Hình 2.1: Board Layout
Hình 2.2: Sơ đồ chân BBB
b: Giao tiếp giữa máy tính nhúng và PC
Để giao tiếp với máy tính nhúng BBB thơng qua PC, nhóm đã sử dụng các công
cụ sau:
- Putty: Đây là phần mềm được sử dụng để có thể giúp người dùng điều khiển các
server thơng qua mạng internet. Nó hỗ trợ cho người dùng máy tính các giao thức mạng
bao gồm: SCP, SSH, Rlogin, Telnet, … Cụ thể trong đề tài, nhóm sử dụng để SSH từ
PC sang BBB.
8
Đồ án Thiết kế Hệ thống số
Nhóm 1
- Module USB TO COM FT232: Mạch chuyển đổi tín hiệu USB sang UART, sử dụng
chip FT232RL của FTDI.. Module giúp hỗ trợ làm việc với BBB thông qua giao thức
UART kết hợp với phần mềm Putty.
- Kết nối phần cứng:
Hình 2.3: Sơ đồ chân UART BBB và FT232
Beaglebone Black
Module FT232
GND
GND
TX
RX
RX
TX
2.1.2: LCD 16x2
LCD (Liquid Crystal Display) được sử dụng trong rất nhiều các ứng dụng của
Vi Điều Khiển. LCD có rất nhiều ưu điểm so với các dạng hiển thị khác. Nó có khả
năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự đồ họa), dễ dàng đưa vào mạch
ứng dụng theo nhiều giao thức giao tiếp khác nhau, tốn rất ít tài nguyên hệ thống và giá
thành rẻ…
9
Đồ án Thiết kế Hệ thống số
Nhóm 1
Thơng số kỹ thuật:
- Điện áp hoạt động: 5V
- Hiển thị tối đa 16 ký tự trên 2 dòng
- Chức năng các chân của LCD
+ Chân 1: (Vss) Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND của
mạch điều khiển
+ Chân 2: VDD Là chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với
VCC = 5V của mạch điều khiển
+ Chân 3: VEE là chân điều chỉnh độ tương phản của LCD.
+ Chân 4: RS Là chân chọn thanh ghi (Register select). Nối chân RS với logic “0”
(GND) hoặc logic “1” (VCC) để chọn thanh ghi.
- Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ
“ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
- Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD.
+ Chân 5: R/W là chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với logic “0”
để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc.
+ Chân 6: E Là chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus DB0DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E.
- Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi
bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E.
- Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên
(low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống
mức thấp.
+ Chân 7 - 14: DB0 - DB7 - Tám đường của bus dữ liệu dùng để trao đổi thơng tin với
MPU. Có 2 chế độ sử dụng 8 đường bus này:
- Chế độ 8 bit: Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7.
10
Đồ án Thiết kế Hệ thống số
Nhóm 1
- Chế độ 4 bit: Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là
DB7
+ Chân 15: Nguồn dương cho đèn
+ Chân 16: GND cho đèn nền
Hình 2.4: Sơ đồ chân LCD 16x2
2.2.: Cơ sở lý thuyết
2.2.1: Device driver
- Nằm trong khối Device management giới thiệu ở phần 1.2.
- Là một phần mềm, gồm các lệnh, hướng dẫn CPU cách tương tác với thiết bị. Các
thiết bị có thể là chuột, bàn phím, ổ cứng, card mạng, loa, màn hình, …
- Linux có rất nhiều loại Device(I2C, Ethernet, …) nhưng chủ yếu chia làm 3 loại chính:
- Character device: lượng dữ liệu nhỏ nhất mà CPU và thiết bị trao đổi với nhau là 1
byte. Ví dụ về các thiết bị thuộc loại này là chuột, bàn phím, loa,…
- Block device: lượng dữ liệu nhỏ nhất mà CPU và thiết bị trao đổi với nhau là một
khối, gồm nhiều byte (ví dụ 1 khối gồm 512 byte). Thơng thường, block device là các
thiết bị lưu trữ, như ổ cứng chẳng hạn.
11
Đồ án Thiết kế Hệ thống số
Nhóm 1
- Network device: lượng dữ liệu nhỏ nhất mà CPU và thiết bị trao đổi với nhau là một
gói tin, gồm nhiều byte. Gói tin có kích thước khơng cố định. Thơng thường, network
device là các thiết bị mạng, như NIC card, Wifi chip.
Device driver được chia làm 2 thành phần:
- OS specific. Thành phần này cung cấp cho hệ điều hành các dịch vụ đọc/ghi dữ liệu
của thiết bị. Điều này cho phép chúng ta xây dựng hệ điều hành độc lập với cấu trúc của
thiết bị.
- Device specific. Thành phần này chứa các lệnh hướng dẫn CPU điều khiển thiết bị,
giám sát thiết bị, trao đổi dữ liệu với thiết bị. Chúng ta sử dụng datasheet của thiết bị để
xây dựng thành phần này. Datasheet là một tài liệu được cung cấp bởi nhà sản xuất thiết
bị. Nó mơ tả sơ đồ khối chức năng, nguyên lý hoạt động, hiệu suất hoạt động, đặc tính
điện của thiết bị và đặc biệt là bản đồ thanh ghi (register map).
2.2.2: Linux kernel module
Linux kernel module là một file với tên mở rộng là (.ko). Nó sẽ được lắp vào hoặc
tháo ra khỏi kernel khi cần thiết. Chính vì vậy, nó cịn có một tên gọi khác là loadable
kernel module. Một trong những kiểu loadable kernel module phổ biến đó
là driver. Việc thiết kế driver theo kiểu loadable module mang lại 3 lợi ích:
-
Giúp giảm kích thước kernel. Do đó, giảm sự lãng phí bộ nhớ và giảm thời gian khởi
động hệ thống.
-
Không phải biên dịch lại kernel khi thêm mới driver hoặc khi thay đổi driver.
-
Không cần phải khởi động lại hệ thống khi thêm mới driver. Trong khi đối với
Windows, mỗi khi cài thêm driver, ta phải khởi động lại hệ thống, điều này khơng thích
hợp với các máy server.
12
Đồ án Thiết kế Hệ thống số
Nhóm 1
2.2.3: Giao tiếp giữa tầng User và phần cứng
Hình 2.5: Mơ hình giao tiếp giữa tầng User và phần cứng
Trong Linux, mọi phần cứng sẽ được hệ điều hành hiểu như là 1 file, chính vì
thế tất cả các ứng dụng sẽ đều giao tiếp với phần cứng thơng qua file.
Theo mơ hình trong hình 2.5, khi User có 1 lời gọi xử lý(qua file .c), nó sẽ được
truyền xuống Kernel. Kernel sẽ phải biết được đối với lời gọi xử lý đấy, Device driver
nào sẽ chịu trách nhiệm xử lý nó. Device driver sau khi nhận được tín hiệu từ Kernel sẽ
hướng dẫn CPU giao tiếp với phần cứng.
Chính vì vậy, hệ điều hành đã sinh ra 1 khái niệm là Device file tại Kernel để
chịu trách nhiệm tiếp nhận các lời gọi từ tầng User. Sau khi Device file nhận được các
lời gọi xử lý từ User, Kernel sẽ gọi 1 hàm của Device driver ứng với hàm được tương
tác trên Device file để hướng dẫn CPU giao tiếp với thiết bị.
Kernel sử dụng device number để biết Device driver nào tương ứng với device
file. Device number là một bộ gồm hai số: major number và minor number:
-
Major number giúp kernel nhận biết device driver nào tương ứng với device file.
-
Minor number giúp device driver nhận biết nó sẽ phải điều khiển thiết bị nào, nếu như
device driver đó đang điều khiển nhiều thiết bị.
13
Đồ án Thiết kế Hệ thống số
Nhóm 1
Cấu trúc phần mềm của Device driver:
Phần OS specific gồm các nhóm hàm sau:
-
Hàm khởi tạo. Hàm này chịu trách nhiệm:
•
Yêu cầu kernel cấp phát device number.
•
Yêu cầu kernel tạo device file.
•
Yêu cầu kernel cấp phát bộ nhớ cho các cấu trúc dữ liệu của driver và
khởi tạo chúng.
•
Yêu cầu khởi tạo thiết bị vật lý.
•
Đăng ký các hàm entry point với kernel.
•
Đăng ký hàm xử lý ngắt.
-
Hàm kết thúc. Hàm này làm ngược lại những gì hàm khởi tạo đã làm.
-
Các hàm entry point. Ví dụ open(), release(), read(), write(), ioctl(), mmap()…
Phần device specific gồm các nhóm hàm sau:
-
Nhóm các hàm khởi tạo/giải phóng thiết bị.
-
Nhóm các hàm đọc/ghi vào các thanh ghi của thiết bị.
-
Đọc/ghi các thanh ghi dữ liệu.
-
Lấy thông tin từ các thanh ghi trạng thái.
-
Thiết lập lệnh cho các thanh ghi điều khiển.
-
Nhóm các hàm xử lý ngắt.
2.3: Nghiên cứu thiết kế Đồng hồ số sử dụng Beaglebone Black
Qua việc tìm hiểu cơ sở lý thuyết và các linh kiện sử dụng trong đồ án, nhóm sẽ
trình bày tiếp theo về mơi trường để lập trình, ý tưởng và lưu đồ thuật tốn sử dụng.
2.3.1: Mơi trường
a. Editor
Có rất nhiều text editor của Linux hỗ trợ thao tác với file như nano, emacs… tuy
nhiên nhóm lựa chọn Vim vì tính phổ biến trong cộng đồng lập trình cũng như tính linh
hoạt, có nhiều tính năng hỗ trợ người dùng. Song với việc hỗ trợ rất nhiều chức năng
nên Vim có rất nhiều phím tắt, khá khó khăn cho người mới bắt đầu.
14
Đồ án Thiết kế Hệ thống số
Nhóm 1
Hình 2.6: Giao diện Vim
b. Makefile
Make là 1 công cụ được dùng để tự động chuyển đổi mã nguồn thành 1 tệp thực
thi. Trong đề tài này, nhóm sử dụng Makefile để biên dịch file source thành loadable
kernel module.
Chương trình:
obj-m := lcd.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD
:= $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean
Trong đó:
Obj-m: Biến chỉ target file sinh ra là file .ko
flags –C: chỉ định ra thư mục chưa Makefile. Thường thì sẽ trỏ đường dẫn của cờ này
vào file header của linux.
flags –M: chỉ định đường dẫn đến thư mục build modules.
all: khi chạy lệnh make nó sẽ nhảy vào rule này và thực hiện biên dịch.
15
Đồ án Thiết kế Hệ thống số
Nhóm 1
Hình 2.7: Danh sách file sau khi biên dịch Makefile
clean: lệnh make clean xóa hầu hết tất cả các file đã được biên dịch theo obj.
Hình 2.8: Danh sách file sau khi clean Makefile
2.3.2: Sơ đồ tổng quan hệ thống
Dựa theo các cơ sở lý thuyết nghiên cứu, nhóm sẽ lập trình 1 Device driver theo
cấu trúc Character device để ghi thông tin ngày tháng năm, giờ phút giây từ OS ra LCD.
Sau khi biên dịch được từ file .c ra file .ko. Nhóm tiến hành load kernel module
vào hệ điều hành bằng lệnh: sudo insmod lcd.ko với lcd.ko là tên của kernel module.
Bởi quá trình load kernel module vào hệ điều hành làm thay đổi cấu trúc của kernel nên
cần sử dụng quyền sudo. Sau đó device file sẽ mở file bằng hàm open(), ghi vào file nội
dung user truyền xuống bằng hàm write() và đóng file bằng hàm close(). Trong q
trình ghi file, device driver sẽ tiến hành ghi thông tin user truyền xuống lên LCD.
16
Đồ án Thiết kế Hệ thống số
Nhóm 1
User space
“sudo insmod lcd.ko”
Device file
Open()
Write()
Close()
Device driver
Lcd_print()
OS
LCD 16x2
Hình 2.9: Sơ đồ tổng quan hệ thống
2.3.3: Thiết kế phần mềm
Character device driver có 2 module chính đó là module init và module exit.
Module init sẽ được gọi sau khi load device driver vào hệ thống và ngược lại, module
exit sẽ được gọi khi unload device driver khỏi hệ thống.
a. Lưu đồ thuật toán
-
Module Init:
17
Đồ án Thiết kế Hệ thống số
Nhóm 1
Xin cấp phát động
device number
Thốt
Khởi tạo và đăng kí
device file với hệ thống
Thốt
Khởi tạo cấu trúc
character device
Thêm character device
vào hệ thống
Thốt
Cấu hình GPIO
Beaglebone
Khời tạo LCD
Hình 2.10: Lưu đồ thuật tốn module Init
18
Đồ án Thiết kế Hệ thống số
-
Nhóm 1
Đầu tiên để load kernel module vào hệ thống, ta cần cấp phát động cho nó 1 cặp số
major, minor (gọi tắt là device number) bằng hàm alloc_chrdev_region( ):
if( alloc_chrdev_region( &dev_number, MINOR_NUM_START ,
MINOR_NUM_COUNT , DEVICE_NAME ) < 0)
{
printk( KERN_DEBUG "ERR: Failed to allocate major
number \n" );
return -1;
}
Tham số đầu tiên truyền vào là dev_number, đây là 1 biến mang struct
dev_t, nó sẽ chứa 2 số major và minor.
Các số minor sẽ được cấp phát khác nhau từ nhỏ tới lớn, tham số thứ 2 và
thứ 3 là tham số để kernel bắt đầu kiểm tra xem đã có những thiết bị nào được sử dụng
và cấp đến số tiếp theo.
Tham số cuối cùng là tên của device file.
-
Khởi tạo device file với hệ thống
dev_ret = device_create (klcd_class, NULL, dev_number, NULL,
DEVICE_NAME);
if(IS_ERR(dev_ret)){
class_destroy(klcd_class );
unregister_chrdev_region(dev_number, MINOR_NUM_COUNT
);
printk(KERN_DEBUG "ERR: Failed to create device
structure \n" );
return PTR_ERR(dev_ret );
}
Tham số klcd_class mang struct class, chứa tên module và tên class.
klcd_class = class_create( THIS_MODULE, CLASS_NAME );
Tiếp theo là cặp số major, minor và tên device file. Sau bước này, device
file sẽ được tạo ra trong thư mục /dev.
19
Đồ án Thiết kế Hệ thống số
-
Nhóm 1
Khời tạo character device driver
cdev_init( &klcd_cdev, &klcd_fops);
Tham số đầu tiên là biến struct cdev, thể hiện cho việc đăng kí character
device driver. Tiếp đến là biến khai các hàm sẽ được gọi trong device driver để xử lý
các lời gọi từ User.
static struct file_operations klcd_fops =
{
owner = THIS_MODULE,
open = klcd_open,
release = klcd_close,
write = klcd_write,
};
Tại đây, nhóm hiện tại đang khai báo các chức năng: open, close, write.
Khi đã tạo thành công device driver, nhóm cấu hình chân cho Beaglebone kết nối
với LCD và khởi tạo LCD. Các chân kết nối
#define LCD_RS_PIN_NUMBER
30
// LCD_RS: P9_11
#define LCD_E_PIN_NUMBER
60
// LCD_E:
(GPIO pin 30)
P9_12 (GPIO pin 60)
#define LCD_DB4_PIN_NUMBER 3
// LCD_DB4: P9_21 (GPIO pin 3)
#define LCD_DB5_PIN_NUMBER 2
// LCD_DB5: P9_22 (GPIO pin 2)
#define LCD_DB6_PIN_NUMBER 49
// LCD_DB6: P9_23 (GPIO pin 49)
#define LCD_DB7_PIN_NUMBER 15
// LCD_DB7: P9_24 (GPIO pin 15)
- Module Exit:
Ngược lại với module init, module exit sẽ bao gồm các hàm gỡ driver khỏi hệ
thống, hủy đăng kí device file, hủy major, minor number và giải phóng các chân GPIO
của board
20