Nội dung báo cáo sẽ bao gồm các phần chính như: kiến trúc của Android, phương pháp tích hợp Android vào các thiết bị nhúng, các thách thức và giải pháp khi triển khai Android Embedded, c
GIỚI THIỆU
Mục tiêu và phạm vi nghiên cứu
Cung cấp cho người đọc cái nhìn tổng quan về Android nhúng, bao gồm định nghĩa, lợi ích, ứng dụng và các thành phần chính Phân tích chi tiết kiến trúc hệ thống Android nhúng, bao gồm phần cứng, phần mềm và các lớp trừu tượng Đề cập đến các công cụ và nền tảng phổ biến được sử dụng cho phát triển Android nhúng Thảo luận về các thách thức và giải pháp tiềm năng trong việc phát triển và triển khai Android nhúng Xu hướng và dự báo tương lai cho Android nhúng
Báo cáo sẽ tập trung vào các khía cạnh cơ bản của Android nhúng, bao gồm kiến trúc hệ thống, công cụ phát triển và các trường hợp sử dụng phổ biến Sẽ không đi sâu vào các chi tiết kỹ thuật cụ thể của các phiên bản Android khác nhau hoặc các thiết bị nhúng cụ thể Báo cáo sẽ dựa trên thông tin có sẵn công khai và các nguồn
Android nhúng là một nền tảng mạnh mẽ và linh hoạt cho phát triển các ứng dụng nhúng Với những lợi ích như tính mở, khả năng tương thích rộng rãi và cộng đồng phát triển lớn, Android nhúng đang được sử dụng ngày càng phổ biến trong nhiều lĩnh vực khác nhau Báo cáo này cung cấp cho người đọc một cái nhìn tổng quan về Android nhúng, bao gồm kiến trúc hệ thống, công cụ phát triển, trường hợp sử dụng, thách thức và xu hướng tương lai.tài liệu uy tín.
Cấu trúc tổ chức của báo cáo
Tóm lại, Mục tiêu chính của nghiên cứu là tạo ra các giải pháp nhận diện khuôn mặt hiệu quả, đáp ứng nhu cầu thực tiễn và đảm bảo an toàn thông tin cá nhân của người dùng Đồng thời, nghiên cứu cũng nhằm khám phá và ứng dụng các tiềm năng của công nghệ nhận diện khuôn mặt trong các lĩnh vực khác nhau như an ninh, quản lý truy cập, giáo dục, y tế, và công nghiệp Điều này đặt ra yêu cầu về
6 việc tối ưu hóa hiệu suất và tích hợp hệ thống vào các môi trường thực tế một cách linh hoạt và hiệu quả
Cấu trúc tổ chức của một báo cáo về embedded Android thường bao gồm các phần sau:
Hệ điều hành nhúng: Giới thiệu về hệ điều hành nhúng và cách chúng hoạt động
Android OS: Trình bày kiến thức cơ bản về hệ điều hành Android, cấu trúc của nó và cách hoạt động
1.3.2 Kiến thức cơ bản về Embedded Android:
Embedded Android là gì?: Giải thích khái niệm và ý nghĩa của Embedded
Kiến thức cơ bản: Đặc điểm và tính năng của Embedded Android, cách tích hợp Android vào các thiết bị nhúng
1.3.3 Thực hiện và Triển khai:
Phát triển ứng dụng nhúng: Mô tả quy trình phát triển ứng dụng nhúng trên nền tảng Android
Triển khai vào thiết bị: Hướng dẫn cách triển khai ứng dụng Android vào thiết bị nhúng
1.3.4 Thử nghiệm và Đánh giá:
Kiểm thử: Mô tả quy trình kiểm thử ứng dụng nhúng trên thiết bị
Đánh giá hiệu suất: Đánh giá hiệu suất của ứng dụng và hệ thống nhúng
1.3.5 Kết luận và Tương lai:
Tóm tắt: Tóm lại kết quả quan trọng nhất của nghiên cứu
Hướng phát triển: Đề xuất các hướng phát triển tiềm năng hoặc công việc tương lai liên quan đến Embedded Android.
Sự khác biệt giữa hệ thống nhúng và hệ thống thông thường
Hệ điều hành thời gian thực (realtime) Hệ điều hành thông thường (non-
Thường không có giao diện (GUI) tường tác với người dung
Thường có giao diện (GUI) tương tác với người dùng như ta dùng hàng ngày
Chúng cần phản hồi nhanh bởi vì đa số các tác vụ tương tác với thiết bị, máy móc khác chứ không phải con người
Khi mở một phần mềm trên đó, có thể bạn phải chờ nó tải rất lâu, việc chờ đợi này cũng không ảnh hưởng gì cả Bởi vì đa số phần mềm đó tương tác với con người chứ ít tương tác với các phần mềm hoặc thiết bị khác
Ví dụ: VxWorks và FreeRTOS Ví dụ: Windows, macOS và Linux
1.5 Kiến trúc cơ bản của một hệ thống nhúng Android
Hình 1 1.Kiến trúc cơ bản của một hệ thống nhúng Android
Ứng dụng là lớp trên cùng của kiến trúc Android Đây là nơi chứa các ứng dụng được cài đặt trên thiết bị, bao gồm:
Ứng dụng hệ thống được cài đặt sẵn như: Màn hình chính, Danh bạ, Camera, Thư viện ảnh,
Ứng dụng của bên thứ ba được tải xuống từ CH Play như: Ứng dụng trò chuyện, Trò chơi,
Các ứng dụng này chạy trên nền Android Runtime (ART) bằng cách sử dụng các lớp và dịch vụ được cung cấp bởi framework ứng dụng
Framework ứng dụng cung cấp nhiều lớp quan trọng được sử dụng để xây dựng một ứng dụng Android Nó đóng vai trò trung gian, giúp:
Truy cập phần cứng theo một cách thống nhất, không phụ thuộc vào từng loại thiết bị cụ thể
Quản lý giao diện người dùng (UI) với các tài nguyên của ứng dụng
Cung cấp các dịch vụ để tạo và quản lý các thành phần của ứng dụng
Framework ứng dụng bao gồm các loại dịch vụ khác nhau như: Trình quản lý hoạt động (activity manager), Trình quản lý thông báo (notification manager), Hệ thống giao diện người dùng (view system), Trình quản lý gói (package manager), Mỗi dịch vụ đều hỗ trợ việc phát triển ứng dụng theo các yêu cầu cụ thể
Môi trường chạy Android (ART) là một trong những thành phần quan trọng nhất của hệ điều hành Android Nó bao gồm các thư viện cốt lõi và máy ảo Dalvik (DVM) Chức năng chính của ART là cung cấp nền tảng cho framework ứng dụng và hỗ trợ các ứng dụng hoạt động nhờ các thư viện cốt lõi
Giống như Máy ảo Java (JVM), Máy ảo Dalvik (DVM) là một máy ảo dựa trên thanh ghi được thiết kế và tối ưu hóa đặc biệt cho Android để đảm bảo thiết bị có thể chạy nhiều ứng dụng hiệu quả DVM phụ thuộc vào nhân Linux để quản lý luồng và quản lý bộ nhớ cấp thấp
Các thư viện cốt lõi cho phép chúng ta triển khai các ứng dụng Android bằng các ngôn ngữ lập trình Java hoặc Kotlin tiêu chuẩn
Thư viện nền tảng bao gồm nhiều thư viện cốt lõi C/C++ và thư viện Java như Media, Graphics, Surface Manager, OpenGL, v.v để hỗ trợ phát triển ứng dụng Android
Thư viện media cung cấp hỗ trợ phát và ghi âm các định dạng âm thanh và video
Surface manager chịu trách nhiệm quản lý quyền truy cập vào hệ thống hiển thị
SGL (phmutlich là thư viện đồ họa 2D) và OpenGL (thư viện đồ họa 3D) đều là các API đa ngôn ngữ, đa nền tảng được sử dụng cho đồ họa máy tính 2D và 3D
SQLite cung cấp hỗ trợ cơ sở dữ liệu và FreeType cung cấp hỗ trợ font chữ
WebKit: Công cụ render web nguồn mở này cung cấp mọi chức năng để hiển thị nội dung web và đơn giản hóa việc tải trang
SSL (Secure Sockets Layer) là công nghệ bảo mật để thiết lập liên kết được mã hóa giữa máy chủ web và trình duyệt web
Nhân Linux là trái tim của kiến trúc Android Nó quản lý tất cả các trình điều khiển (driver) cần thiết trong quá trình chạy, chẳng hạn như trình điều khiển hiển thị, camera, Bluetooth, âm thanh, bộ nhớ, v.v
Nhân Linux đóng vai trò như một lớp trừu tượng giữa phần cứng thiết bị và các thành phần khác của kiến trúc Android Nó chịu trách nhiệm quản lý bộ nhớ, năng lượng, thiết bị, v.v
Các tính năng chính của Nhân Linux:
Bảo mật: Xử lý vấn đề bảo mật giữa ứng dụng và hệ thống
Quản lý bộ nhớ: Hiệu quả phân bổ và quản lý bộ nhớ, tạo điều kiện thuận lợi cho việc phát triển ứng dụng
Quản lý tiến trình: Điều phối tiến trình hoạt động trơn tru, phân bổ tài nguyên khi cần thiết
Ngăn xếp mạng: Xử lý hiệu quả các hoạt động liên lạc mạng
Mô hình trình điều khiển: Đảm bảo ứng dụng hoạt động chính xác trên thiết bị Nhà sản xuất phần cứng chịu trách nhiệm tích hợp trình điều khiển của họ vào bản dựng Linux.
ANDROID VÀ EMBEDED ANDROID
Hệ điều hành android
Android là một hệ điều hành nguồn mở được xây dựng dựa trên phiên bản sửa đổi của nhân Linux Nó đi kèm với một khung giao diện người dùng đầy đủ, được tích hợp với SELinux Tính linh hoạt và dễ sử dụng của HĐH đã góp phần làm cho nó ngày càng phổ biến trong nhiều ứng dụng.
Android nhúng
Android nhúng cung cấp tất cả lợi ích của Linux nhúng và bổ sung thêm giao diện thân thiện với người dùng cũng như môi trường lập trình quen thuộc Nó được sử dụng trong nhiều ứng dụng khác nhau như bảng hiệu kỹ thuật số, thử nghiệm và đo lường, điểm bán hàng và hệ thống ô tô (chúng tôi sẽ tập trung vào phần sau của bài viết).
Lợi ích khi ứng dụng android nhúng vào dự án
Google cung cấp mã nguồn cho lõi của Android thông qua Dự án mã nguồn mở Android (AOSP) AOSP bao gồm mã nguồn cho nhiều thành phần khác nhau, bao gồm màn hình khởi chạy, trình duyệt cơ bản, đồng hồ và ứng dụng điện thoại
Bạn có thể nhận bản sao AOSP ngay bây giờ thông qua máy chủ git của Google nhưng hãy nhớ rằng tải xuống đầy đủ sẽ mất khoảng 50 GB Tại source.android.com, bạn có thể tìm thấy hướng dẫn chi tiết về cách xây dựng AOSP tuyến chính
Thành phần phần mềm chính thứ hai mà bạn cần là nhân Linux, nhân này cũng có sẵn miễn phí theo giấy phép GPL copyleft Giấy phép này cho phép các nhà phát triển sửa đổi mã và phân phối nó, miễn là các sửa đổi đó được công khai
Android có giao diện người dùng (UI) quen thuộc
Nếu sản phẩm của bạn có màn hình cảm ứng thì Android là lựa chọn lý tưởng Vì hầu hết mọi người đều đã từng sử dụng điện thoại Android nên họ sẽ quen với giao diện người dùng (UI), bao gồm cử chỉ chạm và cách điều hướng menu cũng như các tùy chọn trên màn hình Bằng cách kết hợp giao diện người
12 dùng của Android vào sản phẩm của bạn, người tiêu dùng cuối sẽ thấy nó trực quan và dễ sử dụng, nâng cao trải nghiệm tổng thể của họ
Android có môi trường lập trình quen thuộc
Google cung cấp tài liệu và hỗ trợ mở rộng cho giao diện lập trình Android
Bạn có thể truy cập giao diện này thông qua dev.android.com Điều này không chỉ đơn giản hóa quá trình phát triển ứng dụng cho sản phẩm của bạn mà còn tạo điều kiện thuận lợi cho nhiệm vụ tìm kiếm các nhà phát triển lành nghề
So với C++, được sử dụng rộng rãi trong môi trường Linux nhúng cơ bản, Android có lượng người theo dõi lớn hơn và nhiều nhà phát triển quen thuộc với nó hơn Tuy nhiên, trình độ thông thạo C++ của bạn vẫn có giá trị vì Android có thể được lập trình bằng cả C++ và Java
Công cụ tốt để lập trình và gỡ lỗi
Google cung cấp nhiều công cụ miễn phí để tạo ứng dụng Android, trong đó Android Studio đóng vai trò là nền tảng chính để viết chương trình Java và
C++.Tuy nhiên, nếu bạn không thoải mái với Java và C++ thì có một số dịch vụ của bên thứ ba phục vụ cho các ngôn ngữ và môi trường khác nhau
Hỗ trợ tốt từ các nhà cung cấp chip Để tích hợp Android vào một thiết bị nhúng, bạn sẽ cần phần cứng có khả năng chạy hệ điều hành cũng như gói hỗ trợ bo mạch cấu hình chính xác cả Android và nhân Linux Điều quan trọng cần lưu ý là các thiết bị nhúng thường phải tuân theo các tiêu chuẩn cao hơn so với các sản phẩm dành cho người tiêu dùng vì chúng thường phải hoạt động trong điều kiện khắc nghiệt trong thời gian dài và có thể không có sự giám sát của con người
Bên dưới là Linux Vì Android chạy trên nhân Linux do nhà sản xuất SoC cung cấp nên kiến thức chuyên môn về Linux mà bạn thu thập được vẫn phù hợp Bạn có thể tùy chỉnh kernel và cài đặt trình điều khiển cho thiết bị của mình và tất cả các công cụ phát triển Linux tiêu chuẩn đều có sẵn, bao gồm cả tính năng hoàn hảo để theo dõi hiệu suất và theo dõi để theo dõi
Bạn có thể tùy chỉnh Android theo nhu cầu của mình Khả năng tùy chỉnh là một lợi thế chính của Phần mềm nguồn mở/tự do (FLOSS), đặc biệt trong bối cảnh các hệ thống nhúng Khả năng sửa đổi mã nền tảng cơ bản là rất quan trọng để tối ưu hóa hiệu suất sản phẩm của bạn Tuy nhiên, chúng tôi khuyên bạn chỉ nên thực hiện những điều chỉnh nhỏ thay vì sửa đổi lớn đối với hệ điều hành cốt lõi để tránh các vấn đề về bảo trì Ví dụ: giới hạn quyền truy cập của người dùng chỉ vào các chương trình bạn cung cấp bằng cách bảo mật giao diện người dùng là một ví dụ điển hình về một chỉnh sửa nhỏ có thể nâng cao sản phẩm của bạn
KIẾN TRÚC HỆ THỐNG NHÚNG ANDROID
Kiến trúc của hệ điều hành android
Hệ điều hành Android là 1 ngăn xếp các thành phần phần mềm, được chia thành 5 phần và 4 lớp chính như trong hình bên dưới
Hình 3 1.Kiến trúc hệ điều hành android
Dưới cùng là lớp Linux - Linux 3.6 cùng với khoảng 115 bản vá Lớp này cung cấp 1 cấp độ trừu tượng giữa phần cứng của thiết bị và các thành trình điều khiển phần cứng thiết yếu như máy ảnh, bàn phím, màn hình hiển thị Đồng thời, hạt nhân (kernel) còn xử lý tất cả các thứ mà Linux có thể làm tốt như mạng kết nối và 1 chuỗi các trình điều khiển thiết bị, giúp cho giao tiếp với các thiết bị ngoại vi dễ dàng hơn
Tuy được phát triển dựa vào nhân Linux nhưng nhân đã được nâng cấp sửa đổi để phù hợp với các thiết bị di động cầm tay do những hạn chế về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhu cầu kết nối không dây
3.1.2 Libraries Ở trên lớp nhân Linux là tập các thư viện bao gồm WebKit – trình duyệt Web mã nguồn mở, được biết đến như thư viện libc, cơ sở dữ liệu SQLite – hữu dụng cho việc lưu trữ và chia sẻ dữ liệu ứng dụng, các thư viênj chơi và ghi âm audio, video, hay các thư viện SSL chiụ trách nhiệm bảo mật Internet… Đây là các thư viện dựa trên Java phục vụ cho việc phát triển Android Ví dụ của các thư viện này bao gồm các thư viện ứng dụng dùng để xây dựng giao diện người dùng, vẽ đồ họa hay truy cập cơ sở dữ liệu 1 số thư viện chính của Android:
android.app – Cung cấp quyền truy cập vào ứng dụng và là nền tảng của tất cả ứng dụng Android
android.content – Cung cấp quyền truy cập nội dung (content), truyền tải thông điệp giữa các ứng dụng hay các thành phần của ứng dụng
android.database – Đựoc sử dụng để truy cập dữ liệu của content provider và cơ sở dữ liệu SQLite
android.opengl – giao diện các phuơng thức Java để sử dụng OpenGL ES
android.os – Cung cấp các ứng dụng với quyền truy cập vào các dịch vụ của hệ điều hành bao gồm thông điệp, các dịch vụ hệ thống và các giao tiếp nội tại
android.text – Đựoc sử dụng để hiển thị và điều chỉnh chữ trên màn hình thiết bị
android.view – Các thành phần cơ bản trong việc xây dựng giao diện người dùng của ứng dụng
android.widget – Tập các thành phần giao diện người dùng đã được xây dựng sẵn như các nút, các nhãn (label), list view,…
android.webkit – Tập các lớp cho phép xây dựng khả năng duyệt web
Android Runtime (ART), cùng với người tiền nhiệm của nó là Dalvik, đóng vai trò quan trọng trong việc thực thi các ứng dụng trên hệ điều hành Android Cả hai đều là môi trường runtime, nghĩa là chúng chịu trách nhiệm chạy ứng dụng
16 Android tại thời điểm thực tế (khác với biên dịch mã nguồn sang mã máy trước khi cài đặt) Tuy nhiên, chúng có những điểm khác biệt đáng kể:
Là môi trường runtime mặc định cho Android cho đến phiên bản 4.4 KitKat
Sử dụng phương pháp Just-In-Time (JIT) compilation, nghĩa là nó chỉ biên dịch các phần cần thiết của mã ứng dụng thành mã máy ngay tại thời điểm ứng dụng được chạy Điều này giúp tiết kiệm dung lượng lưu trữ nhưng có thể khiến khởi chạy ứng dụng chậm hơn
Sử dụng Dalvik Virtual Machine (DVM) để thực thi mã bytecode của ứng dụng Android (bytecode là mã trung gian được tạo ra từ mã nguồn gốc của ứng dụng)
Được giới thiệu từ Android 4.4 KitKat, dần thay thế Dalvik
Sử dụng phương pháp Ahead-of-Time (AOT) compilation, nghĩa là toàn bộ ứng dụng được biên dịch thành mã máy tại thời điểm cài đặt Điều này làm cho việc khởi chạy ứng dụng nhanh hơn nhưng lại chiếm nhiều dung lượng lưu trữ hơn
Cũng có thể sử dụng JIT compilation để cải thiện hiệu suất hơn nữa
Cung cấp các tính năng cải tiến khác so với Dalvik, chẳng hạn như improved garbage collection (dọn rác) và hỗ trợ cho các kiến trúc bộ xử lý mới hơn
17 Hình 3 2.So sánh giữa Dalvik và ART
Ứng dụng được phát triển cho Dalvik vẫn tương thích và có thể chạy trên ART
Sự lựa chọn giữa AOT và JIT compilation trên ART có thể phụ thuộc vào nhà phát triển ứng dụng
Dịch vụ hệ thống là những thành phần cốt lõi của hệ điều hành Android, cung cấp các chức năng cơ bản để hỗ trợ hoạt động của ứng dụng và hệ thống Một số dịch vụ hệ thống quan trọng bao gồm:
Quản lý hoạt động (Activity Manager): Quản lý vòng đời của các ứng dụng, bao gồm khởi tạo, tạm dừng, tiếp tục và hủy
Quản lý gói (Package Manager): Cài đặt, gỡ cài đặt và cập nhật ứng dụng
Quản lý tài nguyên (Resource Manager): Quản lý các tài nguyên của hệ thống như hình ảnh, âm thanh và chuỗi
Quản lý thông báo (Notification Manager): Hiển thị thông báo cho người dùng về các sự kiện quan trọng
Quản lý giao diện người dùng (View System): Cung cấp các thành phần giao diện người dùng cơ bản như TextView, Button và ImageView
Khung dịch vụ (Service Framework): Cho phép các ứng dụng giao tiếp với nhau và với hệ thống
Khung liên kết (Binder Framework): Cung cấp cơ chế liên lạc giữa các tiến trình
Khung vị trí (Location Framework): Cung cấp thông tin về vị trí của thiết bị
Khung bảo mật (Security Framework): Cung cấp các chức năng bảo mật cho ứng dụng và hệ thống
Framework Android là một tập hợp các lớp và API (Application Programming Interface) cung cấp cho các nhà phát triển các công cụ cần thiết để xây dựng các ứng dụng Android Framework bao gồm các thành phần sau:
Thành phần cơ bản: Cung cấp các lớp cơ bản cho các ứng dụng Android, chẳng hạn như lớp Activity, lớp View và lớp Service
Thành phần UI: Cung cấp các lớp để xây dựng giao diện người dùng của ứng dụng, chẳng hạn như lớp TextView, Button và ImageView
Thành phần dữ liệu: Cung cấp các lớp để truy cập và quản lý dữ liệu, chẳng hạn như lớp SQLiteDatabase và lớp Cursor
Thành phần mạng: Cung cấp các lớp để truy cập mạng, chẳng hạn như lớp HttpClient và lớp URL
Thành phần đa phương tiện: Cung cấp các lớp để phát và ghi âm thanh và video, chẳng hạn như lớp MediaPlayer và lớp Camera
Thành phần vị trí: Cung cấp các lớp để truy cập thông tin về vị trí của thiết bị, chẳng hạn như lớp LocationManager và lớp LocationListener
Thành phần bảo mật: Cung cấp các lớp để bảo mật ứng dụng và dữ liệu, chẳng hạn như lớp CryptographyManager và lớp KeyStore
Framework Android được thiết kế để giúp các nhà phát triển xây dựng các ứng dụng mạnh mẽ, hiệu quả và dễ sử dụng Nó cung cấp một môi trường phát triển thống nhất và cho phép các nhà phát triển tận dụng các tính năng và chức năng của hệ điều hành Android
19 Dịch vụ hệ thống và Framework Android hoạt động cùng nhau để cung cấp một nền tảng mạnh mẽ và linh hoạt cho các ứng dụng Android Dịch vụ hệ thống cung cấp các chức năng cơ bản cần thiết cho hoạt động của ứng dụng và hệ thống, trong khi Framework Android cung cấp các công cụ cần thiết để xây dựng các ứng dụng
Framework Android sử dụng các dịch vụ hệ thống để cung cấp các chức năng cho các nhà phát triển Ví dụ, Framework Android sử dụng dịch vụ Activity Manager để quản lý vòng đời của các ứng dụng và sử dụng dịch vụ Resource Manager để quản lý các tài nguyên của hệ thống
Dịch vụ hệ thống cũng có thể sử dụng Framework Android để cung cấp các chức năng cho người dùng Ví dụ, dịch vụ Notification Manager sử dụng
Framework Android để hiển thị thông báo cho người dùng
Sự tương tác giữa Dịch vụ hệ thống và Framework Android là điều cần thiết để cung cấp một trải nghiệm người dùng mượt mà và hiệu quả cho các ứng dụng Android
Môi trường phát triển và công cụ cần thiết
Biên dịch chéo hay còn được gọi là Cros Compiler là một trình biên dịch mà có thể chuyển đổi được mã trên máy hoặc là các loại mã cấp thấp với một máy tính khác đang chạy arm-linux-androideabi-4.9 là trình biên dịch chéo do google cung cấp biên dịch từ máy chủ host linux sang kiến trúc arm 32 bit của hệ điều hành android
Hướng dẫn cài đặt Link tải xuống : https://github.com/KudProject/arm-linux-androideabi-4.9.git
Android Studio là Integrated Development Environment (IDE) môi trường phát triển tích hợp chính thức để phát triển các ứng dụng Android Phần mềm này dựa trên IntelliJ IDEA, môi trường phát triển cho phần mềm Java, một môi trường phát triển tích hợp phần mềm Java, kết hợp với các công cụ cho nhà phát triển và chỉnh sửa mã của nó
Hướng dẫn cài đặt : 1 Download bộ cài Bộ công cụ phát triển JAVA – JDK Các bạn có thể down phiên phản JDK mới nhất tại: https://www.oracle.com/java/technologies/javase-downloads.html
21 Hình 4 1.Bộ công cụ phát triển JAVA – JDK
Bộ cài đặt Android Studio Các bạn có thể down phiên bản Android Studio mới nhất tại: https://developer.android.com/studio/index.html
Hình 4 2.Bộ cài đặt Android Studio
Tối thiểu 4 GB RAM, cấu hình đề nghị: 8 GB RAM
Ổ cứng trống ít nhất 10 GB, ưu tiên ổ SSD
Độ phân giải tối thiếu 1280 x 800
Java Development Kit (JDK) 7 trở lên 3 Cài đặt Java JDK
Chạy file cài đặt trong để bắt đầu cài đặt Theo mặc định, file JDK và JRE sẽ được đặt trong thư mục C:\Program Files\Java\
Hình 4 3.Thư mục chứa file JDK và JRE Để kiểm tra xem JDK đã cài đặt thành công trên máy tính của bạn chưa, tiến hành kiểm tra như sau:
Mở CMD ( Bấm tổ hợp phím Window + R sau đó gõ CMD)
Gõ dòng lệnh java –version Nếu xuất hiện thông báo như bên dưới có nghĩa bạn đã cài đặt thành công
Hình 4 4.Cài đặt thành công
23 Hình 4 5 Welcome to Android Studio Setup
Lựa chọn tất cả các tùy chọn (options)
The Android SDK (software development kit) là một tập hợp các công cụ được sử dụng để phát triển ứng dụng cho Android Android SDK bao gồm:
Các thư viện đòi hỏi
Thiết bị giả lập (emulator)
Các tài liệu liên quan cho Android API
Các hướng dẫn cho hệ điều hành Android
Android Virtual Device (AVD) là một thiết bị ảo, nó chạy với bộ giả lập Android (Android emulator) Nó làm việc với bộ giả lập để cung cấp một môi trường thiết bị ảo mà qua đó chúng ta có thể cài đặt và chạy ứng dụng Android giống như trên máy thật
Hình 4 7.Liscense Agreement Chọn thư mục cài đặt:
Android Studio Installation Location: C:\Program Files\Android\Android
Android SDK Install Location: C:\Program Files\Android\sdk
Hình 4 9.Choose Start Menu Folder
Hình 4 11.Completing Android Studio Setup Bạn đã cài đặt xong Android Studio
ADB, còn được gọi là Cầu gỡ lỗi Android, là một công cụ dòng lệnh chủ yếu dành cho các nhà phát triển để gỡ lỗi ứng dụng Giờ đây, nó không bị giới hạn đối với các nhà phát triển và bạn có thể sử dụng nó để thực hiện một số việc hữu ích trên PC của mình, chẳng hạn như sao lưu và khôi phục Android bằng ADB, ADB cài đặt APK cho Android từ máy tính, khởi động lại điện thoại về Chế độ khôi phục và Bootloader, v.v
ADB Tải xuống Windows 10 và cài đặt
Việc thiết lập ADB trên Windows 10 không phức tạp và xem các bước bên dưới:
Tải xuống SDK Platform-Tools và giải nén nó
Bước 1: Đi tới trang https://developer.android.com/tools/adb?hl=vi và nhấp vào Tải xuống Công cụ nền tảng SDK cho Windows để nhận thư mục ZIP
Hình 4 12.Tải xuống SDK Platform-Tools
Bước 2: Giải nén tất cả nội dung của thư mục này trên PC Windows 10 của bạn
Bước 3: Trong thư mục giải nén, nhấn phím Shift và nhấp chuột phải vào khoảng trống Điều này có thể mang lại một menu ngữ cảnh và chọn Open PowerShell window here Trên một số máy tính, bạn nhìn thấy Open command window here
28 Hình 4 13.Tải xuống SDK Platform-Tools
Bật gỡ lỗi USB trên điện thoại Android của bạn Để sử dụng ADB, bạn cần đảm bảo đã bật tính năng gỡ lỗi USB
1 Kết nối điện thoại Android của bạn với PC Windows qua cáp USB Chọn MTP làm chế độ kết nối
2 Nhập lệnh adb devices vào lệnh CMD hoặc PowerShell rồi nhấn Enter Lệnh này có thể xem danh sách các thiết bị Android đang giao tiếp với máy tính của bạn
29 Hình 4 14.Nhập lệnh adb devices vào lệnh CMD
3 Trên màn hình điện thoại của bạn, một dấu nhắc bật lên yêu cầu bạn cho phép truy cập Gỡ lỗi USB Chỉ cần cho phép nó Bạn có thể chọn hộp Luôn cho phép từ máy tính này
4 Sau khi bật gỡ lỗi USB, bạn nên thực thi lại adb devices để liệt kê thiết bị của mình
Bây giờ, ADB đã được cài đặt thành công trên máy tính Windows của bạn Sau đó, bạn có thể chạy một số lệnh ADB tùy theo nhu cầu của mình Hãy xem một số lệnh phổ biến:
adb install – cài đặt ứng dụng theo chương trình bằng tệp
phục hồi khởi động lại adb – khởi động lại thiết bị Android của bạn ở chế độ khôi phục
adb restart bootloader – khởi động lại thiết bị Android của bạn vào bootloader
adb shell – khởi động shell từ xa bằng thiết bị Android của bạn
adb pull – di chuyển tệp từ thiết bị Android của bạn theo chương trình
Kết nối phần cứng
30 Chân GPIO18 sẽ được kết nối với chân VCC của led chân GND của led nối với GND của board rpi3
Lưu ý : điện áp đầu ra của board là 5V với các led có hiệu điện thế nhỏ lên mắc thêm điện trở
Hình 4 15.Kết nối phần cứng
4.3.Qúa trình phát triển ứng dụng điều khiển led
Trong bài lần này chúng em sẽ sử dụng phương pháp gọi trực tiếp system call từ tầng application lý do chọn phương pháp này do không phải build lại aosp.Các phương pháp sử dụng AIDL và HIDL với HAL tạo service theo nhóm em tìm hiểu đều phải build lại aosp.Mà yêu cầu phần cứng để build aosp rất cao Để xây dựng ứng dụng bằng phương pháp gọi system call từ tầng application cần phải xây dựng qua 3 giai đoạn
Giai đoạn 1: Bổ sung driver điều khiển led
Trong giai đoạn này để bổ sung được driver hỗ trợ điều khiển led cần phải cài đặt trình biên dịch chéo sang kiến trúc đối tượng.Tiến hành biên dịch lại kernel để cung cấp mã nguồn cho driver.Sau đó biên dịch lại driver
Giai đoạn 2 : Đưa driver và hệ thống
Sử dụng công cụ adb của android copy file đã biên dịch của driver sang hệ thống Sử dụng các câu lệnh và chèn driver vào kiểm tra hoạt động của trình điều khiển thiết bị
Giai đoạn 3 : Viết chương trình ở tầng điều khiển ứng dụng
Chi tiết quá trình phát triển
Tải về trình biên dịch chéo arm-linux-androideabi-4.9
$ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm- linux-androideabi-4.9 Tải về kernel
$ Git clone -b lineage-16.0 https://github.com/lineage-rpi/android_kernel_brcm_rpi.git
Sau khi đã tải về ta tiến hành biên dịch kernel.Ta tiến hành tải vể giấy phép của bản hệ điều hành này
$ Git clone -b lineage-16.0 https://github.com/lineage rpi/proprietary_vendor_brcm.git
Tiến hành thêm giấy phép tệp lineageos_rpi3_defconfig nằm trong đường dẫn arch/arm/configs/lineageos_rpi3_defconfig
Di chuyển vào thư mục của kernel và tiến hành ghi vào tệp cấu hình.Sử dụng lệnh
$ Make ARCH=arm CROSS_COMPILE=~/arm/bin/arm-linux-androidkernel- lineageos_rpi3_defconfig
Sau khi đã chỉnh sửa xong tệp cấu hình.Chúng ta tiến hành biên dịch lại nhân
$ Make ARCH=arm CROSS_COMPILE=~/arm/bin/arm-linux-androidkernel- Chờ cho máy host biên dịch lại nhân
Khi nhân đã được biên dịch thành công thự hiện viết chương trình điều khiển thiêt bị Sử dụng công cụ nano tạo 1 file mã nguồn bằng trình điều khiển thiết bị bằng ngôn ngữ C Nội dung của file tiến hành điều khiển thiết bị
* \details Simple GPIO driver explanation
#include //copy_to/from_user()
//LED is connected to this GPIO
#define LED_ON 1 dev_t dev = 0;
33 static struct class *dev_class; static struct cdev etx_cdev; static int init etx_driver_init(void); static void exit etx_driver_exit(void);
/*************** Driver functions **********************/ static int etx_open(struct inode *inode, struct file *file); static int etx_release(struct inode *inode, struct file *file); static ssize_t etx_read(struct file *filp, char user *buf, size_t len,loff_t * off); static ssize_t etx_write(struct file *filp, const char *buf, size_t len, loff_t * off); static long etx_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
//File operation structure static struct file_operations fops = {
owner = THIS_MODULE, read = etx_read, write = etx_write, open = etx_open, unlocked_ioctl = etx_ioctl, release = etx_release, };
** This function will be called when we open the Device file
*/ static int etx_open(struct inode *inode, struct file *file) { pr_info("Device File Opened !!!\n"); return 0;
** This function will be called when we close the Device file
*/ static int etx_release(struct inode *inode, struct file *file) { pr_info("Device File Closed !!!\n"); return 0;
** This function will be called when we read the Device file
*/ static ssize_t etx_read(struct file *filp, char user *buf, size_t len, loff_t *off) { uint8_t gpio_state = 0;
//reading GPIO value gpio_state = gpio_get_value(GPIO_21);
//write to user len = 1; if( copy_to_user(buf, &gpio_state, len) > 0) { pr_err("ERROR: Not all the bytes have been copied to user\n");
} pr_info("Read function : GPIO_21 = %d \n", gpio_state); return 0;
** This function will be called when we write the Device file
*/ static ssize_t etx_write(struct file *filp, const char user *buf, size_t len, loff_t *off)
{ uint8_t rec_buf[10] = {0}; if( copy_from_user( rec_buf, buf, len ) > 0) { pr_err("ERROR: Not all the bytes have been copied from user\n");
} pr_info("Write Function : GPIO_21 Set = %c\n", rec_buf[0]); if (rec_buf[0]=='1') { //set the GPIO value to HIGH gpio_set_value(GPIO_21, 1);
} else if (rec_buf[0]=='0') { //set the GPIO value to LOW gpio_set_value(GPIO_21, 0);
} else { pr_err("Unknown command : Please provide either 1 or 0 \n");
} static long etx_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{ switch(cmd) { case LED_OFF: gpio_set_value(GPIO_21,0); break; case LED_ON: gpio_set_value(GPIO_21,1); break; default: pr_info("Default\n"); break;
*/ static int init etx_driver_init(void) {
/*Allocating Major number*/ if((alloc_chrdev_region(&dev, 0, 1, "etx_Dev"))