MẪU BÁO CÁO THỰC TẬP TỐT NGHIỆP TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA KỸ THUẬT MÁY TÍNH BÁO CÁO THỰC TẬP DOANH NGHIỆP CÀI ĐẶT HỆ ĐIỀU HÀNH VÀ TRIỂN KHAI DEVICE DRIVER CƠ BẢN TRÊN MÁY TÍNH NHÚNG SV t[.]
Trang 1KHOA KỸ THUẬT MÁY TÍNH
-
BÁO CÁO THỰC TẬP DOANH NGHIỆP
CÀI ĐẶT HỆ ĐIỀU HÀNH VÀ TRIỂN KHAI DEVICE DRIVER CƠ BẢN TRÊN MÁY TÍNH
NHÚNG
SV thực hiện: Nguyễn Kim Quốc
MSSV: 18521310 Lớp: CE502.M11 GVHD: Trần Đại Dương
Thành phố Hồ Chí Minh – Năm 2021
Trang 2LỜI CẢM ƠN
Lời mở đầu em xin cảm ơn các thầy cô trường Đại học Công nghệ Thông tin nói chung, các thầy cô khoa Kỹ thuật Máy tính nói riêng đã giúp em có được kiến thức nền tảng vững chắc để có thể tự tin bắt đầu quá trình thực tập tại doanh nghiệp Em cũng xin cảm ơn các anh Trương Anh Tiến, Hoàng Anh Tú là nhân viên thuộc Công ty cổ phần tập đoàn công nghệ Unicloud đã hướng dẫn và hỗ trợ em hết mình trong quá trình em thực tập tại công ty Cuối cùng em xin cảm ơn thầy Trần Đại Dương vì đã giám sát chặt chẽ em trong cả quá trình thực tập và giúp đỡ em hoàn thiện bài báo cáo này
TP HCM, tháng 12 năm 2021 Sinh viên thực hiện
Nguyễn Kim Quốc
Trang 3MỤC LỤC
LỜI CẢM ƠN II MỤC LỤC III DANH MỤC TỪ VIẾT TẮT IV
1 LỊCH LÀM VIỆC 1
1.1 Lịch làm việc của công ty 1
1.2 Lịch làm việc của bản thân 1
2 GIỚI THIỆU CÔNG TY CỔ PHẦN TẬP ĐOÀN CÔNG NGHỆ UNICLOUD 1
3 NỘI DUNG CÔNG VIỆC ĐƯỢC GIAO 2
3.1 Danh sách công việc được giao 2
3.2 Yêu cầu cụ thể 3
4 QUÁ TRÌNH THỰC HIỆN VÀ KẾT QUẢ CÔNG VIỆC 4
4.1 Công việc 1: Tìm hiểu và viết tài liệu hướng dẫn cài hệ điều hành cho một máy tính nhúng 4
4.2 Công việc 2: Tìm hiểu Linux loadable module 5
4.3 Công việc 3: Tìm hiểu Yocto Project 6
4.4 Công việc 4: Xây dựng hệ điều hành cho Raspberry Pi từ mã nguồn sẵn có bằng Yocto Project 8
4.5 Công việc 5: Triển khai một Linux device driver đơn giản cho Raspberry Pi 11
4.6 Công việc 6, 7, 8, 9: Tìm hiểu về bộ xử lý trên gateway, xây dựng, cài đặt hệ điều hành cho gateway, triển khai device driver cơ bản qua SSH và cấu hình tìm nạp nhân Linux từ bộ nhớ ngoài 20
5 KẾT QUẢ ĐẠT ĐƯỢC CỦA BẢN THÂN 21
6 NHẬN XÉT VỀ CHƯƠNG TRÌNH ĐÀO TẠO CỦA KHOA 22
TÀI LIỆU THAM KHẢO 24
Trang 4
DANH MỤC TỪ VIẾT TẮT
Trang 51 LỊCH LÀM VIỆC
1.1 Lịch làm việc của công ty
Công ty có 2 khối nhân viên:
- Khối văn phòng: Làm việc 8.8 tiếng/ngày, 5 ngày/tuần từ thứ hai đến hết chiều thứ sáu
- Khối Sản xuất và Vận hành: Làm việc 8 tiếng/ngày, 5.5 ngày/tuần từ thứ hai đến trưa thứ bảy
Thời gian làm việc của công ty từ ngày bắt đầu kì thực tập:
- 13/09 – 22/10: Làm việc trực tuyến do ảnh hưởng bởi dịch Covid
- 25/10 – nay: Làm việc trực tiếp tại công ty
1.2 Lịch làm việc của bản thân
Lịch làm việc của bản thân có khác với lịch của công ty vì một số lý do cá nhân:
- Làm việc 8.8 tiếng/ngày, 4 ngày/tuần từ thứ hai đến thứ năm
- 13/09 – 28/10: Làm việc trực tuyến
- 01/11 – 03/12: Làm việc trực tiếp tại công ty
2 GIỚI THIỆU CÔNG TY CỔ PHẦN TẬP ĐOÀN CÔNG NGHỆ UNICLOUD
Công ty cổ phần tập đoàn công nghệ Unicloud là thành viên chịu trách nhiệm lĩnh vực công nghệ của Tập đoàn kinh tế đa ngành Sunshine Group
Trang chủ của công ty tự giới thiệu như sau: “Được thành lập từ năm 2016, Unicloud
là công ty công nghệ chuyên về các giải pháp công nghệ IoT liên quan tới tối ưu và nâng cao chất lượng đời sống của cư dân tại các dự án căn hộ hạng sang Với tiên chỉ đó, Unicloud không ngừng phát triển và cho ra đời các giải pháp như giải pháp tổng thể cho smart living, giải pháp nhà thông minh, giải pháp bãi đỗ xe thông minh, giải pháp an ninh thông minh, giải pháp thang máy thông minh, giải pháp kiểm soát ra vào thông minh và còn nhiều giải pháp nữa sắp tới Để kiểm soát và đảm bảo chất lượng sản phẩm cũng như dịch vụ tới từng cư dân, khách hàng, tại Unicloud, chúng tôi lắng nghe khách hàng, và theo đó cùng với đội ngũ kỹ sư kỹ thuật trẻ trung, sáng tạo hơn 50 người được lãnh đạo
Trang 6sản phẩm hoàn thiện cả phần cứng cũng như phần mềm từ khâu lên thiết kế ý tưởng sản phẩm, thiết kế mẫu sản phẩm gồm vẽ mạch, viết firmware và viết app cho tới test kiểm sản phẩm kỹ lưỡng trên các mô hình thực tế, và cuối cùng là cho ra đời các sản phẩm hoàn thiện sản xuất hàng loạt tại nhà máy được kiểm soát chặt chẽ của chúng tôi.” (trích dẫn từ https://career.unicloud.com.vn/intern/)
Tầm nhìn của công ty là không ngừng đổi mới, sáng tạo để giải quyết các vấn đề của người dùng và các ngành dịch vụ bằng sự chủ động, nguồn nhân lực chất lượng cao và công nghệ hiện đại, kết nối tất cả các Thiết bị - Dịch vụ - Con người Hướng đến Top 10 SEA và TOP 500 tập đoàn công nghệ thế giới với 5,000 nhân sự tại ít nhất 10 quốc gia trên toàn cầu
Sứ mệnh của công ty là tiên phong trong chuyển đổi số của Việt Nam và thế giới, giúp nâng tầm giá trị chất xám của người Việt phục vụ cho cộng đồng văn minh giúp nâng cao chất lượng sống không chỉ của người Việt mà trên toàn thế giới
Những lĩnh vực phát triển của công ty:
- Xây dựng các ứng dụng di động (Mobile App) cho việc giám sát, điều khiển,
- Thiết kế phần cứng của Sản phẩm
- Sản xuất Sản phẩm
- Xây dựng Firmware, Cloud Server,
- Xây dựng Mobile App, Website,
- AI, Machine learning, …
Unicloud có hai trụ sở:
- Trụ sở chính: Tầng 10, Toà nhà Sunshine Center, Số 16 Phạm Hùng, Hà Nội
- Chi nhánh: Block 5, Lô I-3B-1, Đường N6, Khu Công Nghệ Cao, P Tân Phú,
TP Thủ Đức, TP Hồ Chí Minh
3 NỘI DUNG CÔNG VIỆC ĐƯỢC GIAO
3.1 Danh sách công việc được giao
Danh sách các công việc được giao và thời gian thực hiện được trình bày trong Bảng 3.1
Trang 7Bảng 3.1: Kế hoạch thực tập
STT Tên công việc Thời gian thực hiện
Tình trạng
Từ ngày Đến ngày
1
Tìm hiểu và viết tài liệu hướng
dẫn cài hệ điều hành cho một
5 Triển khai Linux device driver
đơn giản cho Raspberry Pi 21/10/2021 28/10/2021 100%
6 Tìm hiểu về gateway của công
7
Xây dựng hệ điều hành từ mã
nguồn được cung cấp cho
gateway của công ty
04/11/2021 09/11/2021 100%
8 Cài đặt hệ điều hành cho
gateway của công ty 10/11/2021 15/11/2021 100%
Công việc 1: Tìm hiểu và viết tài liệu hướng dẫn cài hệ điều hành cho một máy tính
nhúng: Đối tượng là một máy tính nhúng có sẵn trên thị trường mà công ty đang có ý
định sử dụng trong tương lai; nhiệm vụ là tìm kiếm, đọc, dịch và ghi chú lại các lỗi có thể xảy ra trong quá trình thực hiện với định dạng tệp markdown, cụ thể là quá trình xây dựng hệ điều hành từ mã nguồn có sẵn Công việc này được dùng để đánh giá khả năng tìm hiểu tài liệu của sinh viên thực tập
Công việc 2: Tìm hiểu Linux loadable module: tìm hiểu định nghĩa, cách thức hoạt động và viết một chương trình “hello world”
Trang 8Công việc 3 và 4: Tìm hiểu Yocto Project và xây dựng hệ điều hành cho Raspberry Pi
từ mã nguồn có sẵn bằng Yocto Project:
- Tìm hiểu khái niệm, cấu trúc, cách thức hoạt động của Yocto Project
- Vận dụng kiến thức học được xây dựng một hệ điều hành có khả năng kết nối wifi, ethernet; có khả năng thiết lập kết nối SSH và thực thi được Loadable
kernel modules (tệp ko)
Công việc 5: Triển khai một linux device driver đơn giản cho Raspberry Pi: viết một device driver có khả năng bật tắt một led thông qua các lệnh “echo” và “cat”, triển khai device driver đó lên Raspberry Pi thông qua SSH
Công việc 6, 7, 8: Tìm hiểu về bộ xử lý trên gateway, xây dựng và cài đặt hệ điều hành cho gateway: tìm kiếm các tài liệu về bộ xử lý, cách cấu hình phần cứng, dùng Yocto Project xây dựng hệ điều hành với mã nguồn được nhà sản xuất bộ xử lý cung cấp, cài đặt hệ điều hành đó vào gateway
Công việc 9: Triển khai device driver cơ bản qua SSH và cấu hình tìm nạp nhân Linux từ bộ nhớ ngoài: thiết lập các tệp liên quan tới Ethernet để kết nối SSH giữa máy chủ phát triển và gateway, viết một device driver đơn giản in ra “hello world” tại máy chủ và triển khai lên gateway qua SSH; thử cấu hình tìm nạp hệ điều hành từ bộ nhớ ngoài
Khi thực hiện các công việc 6, 7, 8, 9 phải ghi lại cách thức thực hiện và các lỗi xảy ra trong quá trình thực hiện kèm cách sửa thành một tệp markdown và đẩy tệp đó lên git dùng làm tài liệu cho dự án
4 QUÁ TRÌNH THỰC HIỆN VÀ KẾT QUẢ CÔNG VIỆC
4.1 Công việc 1: Tìm hiểu và viết tài liệu hướng dẫn cài hệ điều hành cho một máy tính nhúng
4.1.1 Quy trình thực hiện
Bước 1: Từ tên máy tính nhúng mà người hướng dẫn cung cấp, tìm kiếm trên Internet
và xác định được trang chủ của nhà sản xuất thiết bị
Bước 2: Tìm kiếm tài liệu tương ứng với thiết bị do nhà sản xuất cung cấp
Bước 3: Đọc và ghi chú thành các tệp markdown
Trang 9Bước 4: Làm theo hướng dẫn của tài liệu để xây dựng các hệ điều hành khác nhau từ
mã nguồn nhà sản xuất cung cấp, sửa các lỗi phát sinh và ghi chú vào tệp markdown
4.1.2 Kết quả công việc
Vì hợp đồng bảo mật thông tin của công ty nên phần này em chỉ trình bày quy trình thực hiện và kết quả công việc mà không trình bày cụ thể quá trình làm những gì
Hoàn thành được công việc và được người hướng dẫn đánh giá hoàn thành 100% tại lần tổng kết công việc tháng 09
4.2 Công việc 2: Tìm hiểu Linux loadable module
4.2.1 Quy trình thực hiện
Bước 1: Tham khảo tài liệu có sẵn trên mạng Internet để tìm hiểu các kiến thức về
Linux loadable module
Bước 2: Dựa theo các hướng dẫn có sẵn thiết lập môi trường để xây dựng Linux
loadable module
Bước 3: Lập trình và thực thi chương trình “hello world”
4.2.2 Kết quả công việc
Loadable kernel module là module có thể lắp và tháo ra khỏi nhân Linux mà không cần phải biên dịch lại nhân hay khởi động lại hệ thống
Có 3 loại Linux loadable module: device driver, system call, file system
Quá trình đưa một Linux loadable module vào bên trong kernel space tự động:
- Nhân Linux kích hoạt tiến trình modprobe với tham số là tên module (ví dụ: abc.ko)
- Tiến trình modprobe sẽ kiểm tra /lib/modules/`uname -r`/modules.dep để kiểm tra xem abc.ko có phụ thuộc vào một module bcd.ko nào đó không
- Giả sử abc.ko phụ thuộc vào bcd.ko thì tiến trình modprobe sẽ kích hoạt tiến trình insmod để đưa bcd.ko vào trước rồi sau đó tới abc.ko
Có 2 cách để nhân Linux kích hoạt tiến trình modprobe tự động:
- Sử dụng kmod, là một thành phần trong nhân Linux, hoạt động trong kernel space Khi một thành phần nào đó của nhân cần đưa một module vào trong
Trang 10kernel space, nó sẽ truyền tên module cho hàm request_module của kmod Hàm request_module sẽ gọi hàm call_usermodehelper_setup để sinh ra tiến trình modprobe
- Sử dụng udevd, đây là một tiến trình hoạt động trong user space Nếu một thiết
bị cắm vào hệ thống máy tính, thì điện trở trên bus ngoại vi (ví dụ PCI bus hoặc USB bus) sẽ thay đổi và bộ điều khiển (controller) sẽ biết điều này Khi
đó, bus driver sẽ gửi một bản tin lên cho tiến trình udevd Bản tin này chứa thông tin về thiết bị Tiến trình udevd sẽ tra cứu file /lib/modules/`uname -r`/modules.alias để tìm ra driver nào tương thích với thiết bị Sau đó, udevd sinh ra tiến trình modprobe
Để xây dựng Linux loadable module cơ bản:
- Phải thêm thư viện <linux/module.h> để xử dụng 2 macro module_init(), module_exit() 2 macro này dùng để xác định 2 hàm sẽ chạy khi nạp module vào nhân và khi tháo module ra khỏi nhân
- Phải truyền giá trị cho biến obj-m trong file Makefile để chỉ ra object được xây dựng theo hướng kernel module
Lắp module vào trong kernel space thủ công:
4.3.2 Kết quả công việc
Sơ lược về Yocto Project:
Trang 11- Yocto Project là một dự án mã nguồn mở có khả năng tạo ra các bản phân phối Linux cho các thiết bị nhúng
- Yocto Project dựa trên dự án OpenEmbedded (OE) sử dụng công cụ Bitbake
để xây dựng các hình ảnh Linux (Linux image)
- OpenEmbedded-Core và Bitbake kết hợp cùng với một bộ các metadata (các recipes, config, ) tạo thành Poky Có thể nói Poky là build system của Yocto Project Cấu trúc của Yocto Project được trình bày cụ thể trong Hình 4.1
Hình 4.1: Cấu trúc Yocto Project [1]
- Bitbake là công cụ cốt lõi của Yocto, nó sẽ thông dịch các script được viết trong các recipes (công thức tạo phần mềm) và tạo các hàng đợi các tác vụ cần thực hiện theo thứ tự
- Các thành phần linux mà Yocto có thể xây dựng:
Trang 12Hình 4.2: Quy trình làm việc của Yocto Project [1]
4.4 Công việc 4: Xây dựng hệ điều hành cho Raspberry Pi từ mã nguồn sẵn có bằng Yocto Project
4.4.2 Kết quả công việc
Sau khi làm theo các bước trong quy trình thực hiện, kết quả đạt được là cách dùng Yocto Project để xây dựng bản phân phối Linux từ mã nguồn có sẵn, bên dưới là cách thực hiện mà em nghiên cứu được
Chuẩn bị các package cần thiết cho host (Dùng Ubuntu 20.04)
$ sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat libsdl1.2-dev xterm
Tạo thư mục chứa Project: Ở đây ta sẽ dùng bản phân phối Linux tại nhánh hardknott
vì đây là bản phân phối mới nhất hiện tại Xem thêm tại https://git.yoctoproject.org/poky/refs/heads
Trang 13$ mkdir ~/raspberrpi_yocto
$ cd raspberrpi_yocto
$ git clone -b hardknott git://git.yoctoproject.org/poky.git
Thêm meta dành riêng cho Raspberry Pi
$ cd poky
$ git clone -b hardknott git://git.yoctoproject.org/meta-raspberrypi
Chạy script tạo thư mục build: Yocto cung cấp cho ta một tệp chứa các script để tự động tạo một thư mục chứa kết quả xây dựng, tệp script có tên oe-init-build-env nằm trong thư mục poky
$ cd
$ source poky/oe-init-build-env build
Cấu hình các thành phần để xây dựng tại thư mục conf/ :
- Tại tệp bblayers.conf :
BBLAYERS ?= " \
/home/quockimnguyen/raspberrpi_yocto/poky/meta \ /home/quockimnguyen/raspberrpi_yocto/poky/meta-poky \ /home/quockimnguyen/raspberrpi_yocto/poky/meta-yocto-bsp \
Trang 14EXTRA_USERS_PARAMS = " useradd pi; \
usermod -p 'raspberry' pi; \ usermod -a -G sudo pi; \ usermod -P root root; "
- Trước khi xây dựng ta cần phải cấu hình máy đích (Machine) Ta có thể xem tên các loại máy đích khác nhau của Raspberry Pi tại thư mục poky/meta-raspberrypi/tree/conf/machine
$ echo “MACHINE=\”machine name\”” > conf/local.conf
Tiến hành xây dựng: Các loại hình ảnh Linux có thể xây dựng nằm tại thư mục poky/meta-raspberrypi/recipes-core/images Chạy lệnh sau để tiến hành xây dựng tự động hình ảnh Linux
$ bitbake rpi-basic-image
Sau khi xây dựng xong (khoảng 4 – 5 tiếng) thì hình ảnh Linux sẽ nằm tại thư mục build/tmp/deploy/images/<machine name>/ Hình 4.3 cho thấy các hình ảnh Linux sau khi quá trình xây dựng hoàn thành
Trang 15Hình 4.3: Các tệp hình ảnh Linux sau khi hoàn thành xây dựng
4.5 Công việc 5: Triển khai một Linux device driver đơn giản cho Raspberry Pi 4.5.1 Quy trình thực hiện
Bước 1: Dựa theo kiến thức từ công việc trước có thể tạo ra một device driver cơ bản Bước 2: Tìm hiểu thêm các bài học về cách tạo ra device file, thứ sẽ tồn tại trong thư mục /dev/ để có thể sử dụng các lệnh “echo” và “cat” để đọc ghi dữ liệu
Bước 3: Tham khảo datasheet của Raspberry Pi để tìm kiếm địa chỉ cơ sở của các chân GPIO
Bước 4: Lập trình device driver tại máy chủ và triển khai lên Raspberry Pi thông qua SSH
4.5.2 Kết quả công việc
Xây dựng SDK cho Raspberry Pi:
- Dùng lệnh dưới để xây dựng SDK:
$ bitbake –c populate_sdk
- Chạy tệp sh để cài đặt SDK vào máy: