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

28 0 0
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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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[.]

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 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 BM-CE501-03 LỜI CẢM ƠN Lời mở đầu em xin cảm ơn thầy cô trường Đại học Cơng nghệ Thơng tin nói chung, thầy khoa Kỹ thuật Máy tính nói riêng giúp em có kiến thức tảng vững để tự tin bắt đầu trình thực tập doanh nghiệp Em xin cảm ơn anh Trương Anh Tiến, Hồng Anh Tú nhân viên thuộc Cơng ty cổ phần tập đồn cơng nghệ Unicloud hướng dẫn hỗ trợ em trình em thực tập công ty Cuối em xin cảm ơn thầy Trần Đại Dương giám sát chặt chẽ em trình thực tập giúp đỡ em hoàn thiện báo cáo TP HCM, tháng 12 năm 2021 Sinh viên thực Nguyễn Kim Quốc II BM-CE501-03 MỤC LỤC LỜI CẢM ƠN II MỤC LỤC III DANH MỤC TỪ VIẾT TẮT IV LỊCH LÀM VIỆC 1 1.1 Lịch làm việc công ty 1.2 Lịch làm việc thân GIỚI THIỆU CÔNG TY CỔ PHẦN TẬP ĐỒN CƠNG NGHỆ UNICLOUD NỘI DUNG CÔNG VIỆC ĐƯỢC GIAO 3.1 Danh sách công việc giao 3.2 Yêu cầu cụ thể Q 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 viết tài liệu hướng dẫn cài hệ điều hành cho máy tính nhúng 4.2 Cơng việc 2: Tìm hiểu Linux loadable module 4.3 Cơng việc 3: Tìm hiểu Yocto Project 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ó Yocto Project 4.5 Công việc 5: Triển khai Linux device driver đơn giản cho Raspberry Pi 11 4.6 Cơng việc 6, 7, 8, 9: Tìm hiểu xử lý gateway, xây dựng, cài đặt hệ điều hành cho gateway, triển khai device driver qua SSH cấu hình tìm nạp nhân Linux từ nhớ 20 KẾT QUẢ ĐẠT ĐƯỢC CỦA BẢN THÂN 21 NHẬN XÉT VỀ CHƯƠNG TRÌNH ĐÀO TẠO CỦA KHOA 22 TÀI LIỆU THAM KHẢO 24 III BM-CE501-03 DANH MỤC TỪ VIẾT TẮT Từ viết tắt SSH SDK OS IoT Tên đầy đủ Secure Socket Shell Software Development Kit Operating System Internet of Things IV BM-CE501-03 LỊCH LÀM VIỆC 1.1 Lịch làm việc cơng ty Cơng ty có khối nhân viên: - Khối văn phòng: Làm việc 8.8 tiếng/ngày, ngày/tuần từ thứ hai đến hết chiều thứ sáu - Khối Sản xuất Vận hành: Làm việc 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ông ty từ ngày bắt đầu tập: - 13/09 – 22/10: Làm việc trực tuyến ảnh hưởng dịch Covid - 25/10 – nay: Làm việc trực tiếp công ty 1.2 Lịch làm việc thân Lịch làm việc thân có khác với lịch cơng ty số lý cá nhân: - Làm việc 8.8 tiếng/ngày, 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 công ty GIỚI THIỆU CƠNG TY CỔ PHẦN TẬP ĐỒN CƠNG NGHỆ UNICLOUD Cơng ty cổ phần tập đồn cơng nghệ Unicloud thành viên chịu trách nhiệm lĩnh vực công nghệ Tập đoàn kinh tế đa ngành Sunshine Group Trang chủ công ty tự giới thiệu sau: “Được thành lập từ năm 2016, Unicloud công ty công nghệ chuyên giải pháp công nghệ IoT liên quan tới tối ưu nâng cao chất lượng đời sống cư dân dự án hộ hạng sang Với tiên đó, Unicloud khơng ngừng phát triển cho đời giải pháp 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 sốt vào thơng minh cịn nhiều giải pháp tới Để kiểm soát đảm bảo chất lượng sản phẩm dịch vụ tới cư dân, khách hàng, Unicloud, lắng nghe khách hàng, theo với đội ngũ kỹ sư kỹ thuật trẻ trung, sáng tạo 50 người lãnh đạo người giàu kiến thức, kinh nghiệm tâm huyết lĩnh vực để làm BM-CE501-03 sản phẩm hoàn thiện phần cứng 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 viết app test kiểm sản phẩm kỹ lưỡng mơ hình thực tế, cuối cho đời sản phẩm hoàn thiện sản xuất hàng loạt nhà máy kiểm sốt chặt chẽ chúng tơi.” (trích dẫn từ https://career.unicloud.com.vn/intern/) Tầm nhìn cơng ty khơng ngừng đổi mới, sáng tạo để giải vấn đề người dùng ngành dịch vụ chủ động, nguồn nhân lực chất lượng cao công nghệ đại, kết nối tất Thiết bị - Dịch vụ - Con người Hướng đến Top 10 SEA TOP 500 tập đồn cơng nghệ giới với 5,000 nhân 10 quốc gia tồn cầu Sứ mệnh cơng ty tiên phong chuyển đổi số Việt Nam giới, giúp nâng tầm giá trị chất xám 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 người Việt mà toàn giới Những lĩnh vực phát triển công ty: - Xây dựng ứ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 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, Tồ 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 NỘI DUNG CƠNG VIỆC ĐƯỢC GIAO 3.1 Danh sách công việc giao Danh sách công việc giao thời gian thực trình bày Bảng 3.1 BM-CE501-03 Bảng 3.1: Kế hoạch thực tập STT Tên cơng việc Tìm hiểu viết tài liệu hướng dẫn cài hệ điều hành cho máy tính nhúng Tìm hiểu Linux loadable module Tìm hiểu Yocto Project Xây dựng hệ điều hành cho Raspberry Pi từ mã nguồn sẵn có Yocto Project Triển khai Linux device driver đơn giản cho Raspberry Pi Tìm hiểu gateway cơng ty Xây dựng hệ điều hành từ mã nguồn cung cấp cho gateway công ty Cài đặt hệ điều hành cho gateway công ty Triển khai device driver qua SSH cấu hình tìm nạp nhân Linux từ nhớ Thời gian thực Từ ngày Đến ngày Tình trạng 13/09/2021 23/09/2021 100% 27/09/2021 30/09/2021 100% 03/10/2021 14/10/2021 100% 18/10/2021 20/10/2021 100% 21/10/2021 28/10/2021 100% 01/11/2021 05/11/2021 100% 04/11/2021 09/11/2021 100% 10/11/2021 15/11/2021 100% 16/11/2021 03/12/2021 50% 3.2 u cầu cụ thể Cơng việc 1: Tìm hiểu viết tài liệu hướng dẫn cài hệ điều hành cho máy tính nhúng: Đối tượng máy tính nhúng có sẵn thị trường mà cơng ty có ý định sử dụng tương lai; nhiệm vụ tìm kiếm, đọc, dịch ghi lại lỗi xảy q trình thực với định dạng tệp markdown, cụ thể trình xây dựng hệ điều hành từ mã nguồn có sẵn Cơng việc dùng để đánh giá khả tìm hiểu tài liệu 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 viết chương trình “hello world” BM-CE501-03 Cơng việc 4: Tìm hiểu Yocto Project xây dựng hệ điều hành cho Raspberry Pi từ mã nguồn có sẵn Yocto Project: - Tìm hiểu khái niệm, cấu trúc, cách thức hoạt động Yocto Project - Vận dụng kiến thức học xây dựng hệ điều hành có khả kết nối wifi, ethernet; có khả thiết lập kết nối SSH thực thi Loadable kernel modules (tệp ko) Công việc 5: Triển khai linux device driver đơn giản cho Raspberry Pi: viết device driver có khả bật tắt led thơng qua lệnh “echo” “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 xử lý gateway, xây dựng cài đặt hệ điều hành cho gateway: tìm kiếm tài liệu 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 nhà sản xuất 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 qua SSH cấu hình tìm nạp nhân Linux từ nhớ ngoài: thiết lập tệp liên quan tới Ethernet để kết nối SSH máy chủ phát triển gateway, viết device driver đơn giản in “hello world” máy chủ triển khai lên gateway qua SSH; thử cấu hình tìm nạp hệ điều hành từ nhớ ngồi Khi thực cơng việc 6, 7, 8, phải ghi lại cách thức thực lỗi xảy trình thực kèm cách sửa thành tệp markdown đẩy tệp lên git dùng làm tài liệu cho dự án Q 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 viết tài liệu hướng dẫn cài hệ điều hành cho máy tính nhúng 4.1.1 Quy trình thực 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 Internet xác định trang chủ 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ị nhà sản xuất cung cấp Bước 3: Đọc ghi thành tệp markdown BM-CE501-03 Bước 4: Làm theo hướng dẫn tài liệu để xây dựng hệ điều hành khác từ mã nguồn nhà sản xuất cung cấp, sửa lỗi phát sinh ghi vào tệp markdown 4.1.2 Kết cơng việc Vì hợp đồng bảo mật thông tin công ty nên phần em trình bày quy trình thực kết cơng việc mà khơng trình bày cụ thể q trình làm Hồn thành cơng việc người hướng dẫn đánh giá hoàn thành 100% 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 Bước 1: Tham khảo tài liệu có sẵn mạng Internet để tìm hiểu kiến thức Linux loadable module Bước 2: Dựa theo 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 thực thi chương trình “hello world” 4.2.2 Kết công việc Loadable kernel module module lắp tháo 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ó loại Linux loadable module: device driver, system call, file system Quá trình đưa Linux loadable module vào bên kernel space tự động: - Nhân Linux kích hoạt tiến trình modprobe với tham số tên module (ví dụ: abc.ko) - Tiến trình modprobe kiểm tra /lib/modules/`uname -r`/modules.dep để kiểm tra xem abc.ko có phụ thuộc vào module bcd.ko khơng - Giả sử abc.ko phụ thuộc vào bcd.ko tiến trình modprobe kích hoạt tiến trình insmod để đưa bcd.ko vào trước sau tới abc.ko Có cách để nhân Linux kích hoạt tiến trình modprobe tự động: - Sử dụng kmod, thành phần nhân Linux, hoạt động kernel space Khi thành phần nhân cần đưa module vào BM-CE501-03 kernel space, truyền tên module cho hàm request_module kmod Hàm request_module gọi hàm call_usermodehelper_setup để sinh tiến trình modprobe - Sử dụng udevd, tiến trình hoạt động user space Nếu thiết bị cắm vào hệ thống máy tính, điện trở bus ngoại vi (ví dụ PCI bus USB bus) thay đổi điều khiển (controller) biết điều Khi đó, bus driver gửi tin lên cho tiến trình udevd Bản tin chứa thơng tin thiết bị Tiến trình udevd tra cứu file /lib/modules/`uname r`/modules.alias để tìm driver tương thích với thiết bị Sau đó, udevd sinh tiến trình modprobe Để xây dựng Linux loadable module bản: - Phải thêm thư viện để xử dụng macro module_init(), module_exit() macro dùng để xác định hàm chạy nạp module vào nhân tháo module khỏi nhân - Phải truyền giá trị cho biến obj-m file Makefile để object xây dựng theo hướng kernel module Lắp module vào kernel space thủ công: $ insmod .ko Tháo module khỏi kernel space lệnh: $ rmmod Để xem thông tin gỡ lỗi từ module truyền qua hàm printk, ta sử dụng: $ dmesg 4.3 Cơng việc 3: Tìm hiểu Yocto Project 4.3.1 Quy trình thực Tìm hiểu tài liệu liên quan https://www.yoctoproject.org/ 4.3.2 Kết công việc Sơ lược Yocto Project: đến Yocto Project trang chủ BM-CE501-03 MACHINE ?= "raspberrypi3" SPLASH = "psplash-raspberrypi" EXTRA_IMAGE_FEATURES ?= "debug-tweaks ssh-server-dropbear splash" DISTRO_FEATURES_append = " wifi " IMAGE_FSTYPES = "rpi-sdimg" TOOLCHAIN_TARGET_TASK_append = " kernel-devsrc" INHERIT += "extrausers" EXTRA_USERS_PARAMS = " useradd pi; \ usermod -p 'raspberry' pi; \ usermod -a -G sudo pi; \ usermod -P root root; " - Trước xây dựng ta cần phải cấu hình máy đích (Machine) Ta xem tên loại máy đích khác Raspberry Pi thư mục poky/metaraspberrypi/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 xây dựng nằm 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 xây dựng xong (khoảng – tiếng) hình ảnh Linux nằm thư mục build/tmp/deploy/images// Hình 4.3 cho thấy hình ảnh Linux sau q trình xây dựng hồn thành 10 BM-CE501-03 Hình 4.3: Các tệp hình ảnh Linux sau hồn thành xây dựng 4.5 Cơng việc 5: Triển khai Linux device driver đơn giản cho Raspberry Pi 4.5.1 Quy trình thực Bước 1: Dựa theo kiến thức từ cơng việc trước tạo device driver Bước 2: Tìm hiểu thêm học cách tạo device file, thứ tồn thư mục /dev/ để sử dụng lệnh “echo” “cat” để đọc ghi liệu Bước 3: Tham khảo datasheet Raspberry Pi để tìm kiếm địa sở chân GPIO Bước 4: Lập trình device driver máy chủ triển khai lên Raspberry Pi thông qua SSH 4.5.2 Kết công việc Xây dựng SDK cho Raspberry Pi: - Dùng lệnh để xây dựng SDK: $ bitbake –c populate_sdk - Chạy tệp sh để cài đặt SDK vào máy: 11 BM-CE501-03 $ /tmp/deploy/sdk/poky-glibc-x86_64-rpi-basic-image-cortexa7t2hf-neon-vfpv4raspberrypi3-toolchain-3.3.4.sh - Nếu trình cài đặt SDK thành cơng có thơng tin in giống Hình 4.4 Hình 4.4: Cài đặt SDK thành công - Chạy tệp setup để thiết lập môi trường cho SDK $ source /opt/poky/3.3.4/environment-setup-cortexa7t2hf-neon-vfpv4-poky-linuxgnueabi Cấu trúc device driver: - Phần OS specific gồm nhóm hàm sau: ▪ Hàm khởi tạo Hàm chịu trách nhiệm: • Yêu cầu nhân cấp phát device number • Yêu cầu nhân tạo device file • Yêu cầu nhân cấp phát nhớ cho cấu trúc liệu driver khởi tạo chúng • Yêu cầu khởi tạo thiết bị vật lý • Đăng ký hàm tương tác tệp (entry point) với nhân • Đăng ký hàm xử lý ngắt 12 BM-CE501-03 ▪ Hàm kết thúc Hàm làm ngược lại 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 nhóm hàm sau: ▪ Nhóm hàm khởi tạo/giải phóng thiết bị ▪ Nhóm hàm đọc/ghi vào ghi thiết bị • Đọc/ghi ghi liệu • Lấy thơng tin từ ghi trạng thái • Thiết lập lệnh cho ghi điều khiển ▪ Nhóm hàm xử lý ngắt Cấp phát device number: - Cấp phát tĩnh dùng hàm: int register_chrdev_region (dev_t first, unsigned int cnt, const char *name); - Cấp phát động dùng hàm: int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int cnt, char *name) - Để hủy đăng ký device number ta dùng: void unregister_chrdev_region (dev_t first, unsigned int cnt); Tạo device file gồm bước: tạo class tạo device: - Tạo class: void class_destroy(struct class *) - Tạo device: void device_destroy(struct class * cls, dev_t devt) Đăng kí entry point: - Open release: 13 BM-CE501-03 int (*open)(struct inode *inode, struct file *filp) int (*release)(struct inode *inode, struct file *filp) - Write read: ssize_t (*read) (struct file *filp, char user *buff, size_t size, loff_t *off) - Write: ssize_t (*write) (struct file *filp, char user *buff, size_t size, loff_t *off) Tiến hành lập trình device driver hồn chỉnh: - Tệp hello.c: #include #include #include #include #include #include #define GPIO_ADDR_BASE 0x3f200000 unsigned int *gpio_base; unsigned int *set_mode; unsigned int *set_high; unsigned int *set_low; static char usr_buff[3] = “0”; struct char_drv { dev_t dev_num; struct class *dev_class; struct device *dev; struct cdev *vcdev; }char_drv; static int dev_open(struct inode *, struct file *); 14 BM-CE501-03 static int dev_close(struct inode *, struct file *); static ssize_t dev_read(struct file*, char user *, size_t, loff_t *); static ssize_t dev_write(struct file *, const char user *, size_t, loff_t *); static struct file_operations fops = { open = dev_open, release = dev_close, read = dev_read, write = dev_write, }; static int dev_open(struct inode *inodep, struct file *filep) { printk(“open\n”); return 0; } static int dev_close(struct inode *inodep, struct file *filep) { printk(“close\n”); return 0; } static ssize_t dev_read(struct file *filep, char *buf, size_t len, loff_t *offset) { printk(“read\n”); int size_buff = strlen(usr_buff); ssize_t bytes = len < (size_buff-(*offset)) ? len : (size_buff-(*offset)); printk(“buffer have: %s”, usr_buff); printk(“len have: %d”, len); if(copy_to_user(buf, &usr_buff, bytes)) return -EFAULT; 15 BM-CE501-03 (*offset) += bytes; return bytes; } static ssize_t dev_write(struct file *filep, const char *buf, size_t len, loff_t *offset) { printk(“write %d bytes\n”, len); memset(&usr_buff, 0, sizeof(usr_buff)); if(copy_from_user(&usr_buff, buf, len)) return -EFAULT; if(usr_buff[0] == ‘0’){ set_low = (unsigned int *)(gpio_base+10); (*set_low) = 1

Ngày đăng: 27/05/2023, 15:26

Tài liệu cùng người dùng

Tài liệu liên quan