Font size
WorksheetsCâu hỏi về Driver trong hệ thống nhúng
Total questions: 91
Worksheet time: 46mins
Driver trong hệ thống nhúng là gì?
Chương trình được thực thi trên thiết bị nhúng
Hệ điều hành nhúng
Giúp các ứng dụng hoặc hệ điều hành giao tiếp được với phần cứng cụ thể
Phần cứng giúp kết nối các thiết bị ngoại vi
Character driver là loại driver nào?
Driver cho các thiết bị lưu trữ khối
Driver cho các thiết bị truyền dữ liệu theo ký tự
Driver để quản lý tệp
Driver để điều khiển giao diện đồ họa
Lệnh nào hiển thị danh sách các thiết bị trong /dev?
ls -la /dev
lsmod
cat /dev
ls -l
Số hiệu major trong device file đại diện cho thông tin gì?
Loại thiết bị
Tốc độ của thiết bị
Kiểu dữ liệu của thiết bị
Số hiệu phiên bản của kernel
Minor number trong device file là gì?
Xác định kích thước của thiết bị
Xác định loại thiết bị chính
Phân biệt các thiết bị cùng loại
Xác định quyền truy cập vào thiết bị
Lệnh unregister_chrdev_region có tác dụng gì?
Đăng ký thiết bị
Viết dữ liệu vào thiết bị
Hủy đăng ký vùng thiết bị
Khởi tạo thiết bị
file trong Linux kernel đại diện cho gì?
Tệp đại diện cho quá trình đọc/ghi vào thiết bị
Tên thiết bị
Cấu trúc lưu trữ tệp thông thường
Thông tin về thiết bị
Khi khởi tạo một character driver trong hàm __init, bạn cần gọi hàm nào để kernel tự động cấp phát một major number phù hợp nếu chưa xác định trước?
alloc_chrdev_region với major =0
request_chrdev_region();
register_chrdev_region();
device_register()
Khi một module driver có nhiều thiết bị, chúng thường dùng kiểu số hiệu nào?
Không dùng số hiệu
Khác cả major và minor
Số hiệu major khác nhau
Cùng major, khác minor
Lợi ích của việc sử dụng alloc_chrdev_region() trong hàm __init là gì?
Yêu cầu kernel tự cấp phát major number phù hợp
Đảm bảo rằng minor number là cố định
Tăng tốc độ truy cập vào device
Tăng bộ nhớ cho driver
static struct file_operations fops = {
.open = dev_open,
.release = dev_close,
.read = dev_read,
.write = dev_write,
};
Cấu trúc file_operations trong đoạn mã trên có vai trò gì?
Định nghĩa các thao tác kernel thực hiện cho thiết bị
Định nghĩa các thao tác đọc ghi vào file hệ thống
Định nghĩa các thao tác nạp và gỡ module driver
Định nghĩa các thao tác file mà character driver hỗ trợ
Cho tệp character.c chứa mã đoạn nguồn chương trình C như sau:
static struct file_operations fops = {
.open = dev_open,
.release = dev_close,
.read = dev_read,
.write = dev_write,
};
Để xử lý việc giải phóng tài nguyên sau khi hoàn tất thao tác với thiết bị, hàm nào sẽ được gọi dựa vào đoạn code trên?
dev_write
dev_open
dev_read
dev_close
Câu lệnh nào dưới đây phù hợp nhất để điền vào phần trống để đăng ký số hiệu thiết bị cho character driver?
static int __init exam_init(void)
{
int ret;
..........
if(ret)
{
printk("can not register major no\n");
return ret;
}
printk(KERN_INFO "register successfully major now is: %d\n", MAJOR(dev));
my_cdev = cdev_alloc();
my_cdev->owner = THIS_MODULE;
my_cdev->ops = &fops;
my_cdev->dev = dev;
cdev_add(my_cdev, dev, 0);
return 0;
}
Câu lệnh nào dưới đây phù hợp nhất để điền vào phần trống để đăng ký số hiệu thiết bị cho character driver?
ret = alloc_chrdev_region(&dev, NULL);
ret = register_character_driver(&dev, 0, 1, "example");
ret = unregister_chrdev_region(&dev, 0, 1, "example");
ret = alloc_chrdev_region(&dev, 0, 1, "example_driver");
Trong hàm exam_exit, dòng lệnh unregister_chrdev_region(dev, 1); có vai trò gì?
static void __exit exam_exit(void)
{
printk("goodbye, unregister major\n");
unregister_chrdev_region(dev, 1);
cdev_del(my_cdev);
}
Giải phóng số hiệu thiết bị đã đăng ký cho driver
Giải phóng bộ nhớ đã cấp phát cho các hàm file_operations
Hủy cấu trúc cdev đã được tạo trước đó
Đăng ký lại số hiệu thiết bị với kernel
Câu lệnh iowrite32((1 << LED), (io + GPIO_SETDATAOUT)) có tác dụng gì trong đoạn code hàm dev_write?
Đọc dữ liệu từ chân GPIO
Ghi một giá trị để tắt LED trên chân GPIO
Đặt chế độ cho chân GPIO ở chế độ đầu vào
Ghi một giá trị để bật LED trên chân GPIO
Câu 16: Đâu là định dạng lệnh đúng để nạp một module driver?
echo
modprobe
rmmod
mount
Câu 17: Lệnh mknod được sử dụng để làm gì trong hệ thống Linux?
Tạo một thiết bị mạng
Tạo một thiết bị ảo
Tạo một thiết bị USB
Tạo một tệp trong thư mục /dev
Câu 18: Câu nào sau đây là đúng về struct file_operations?
Được dùng để xác định các hàm thao tác của driver
Chỉ tồn tại trong user space
Không thể tùy chỉnh
Chỉ có trong kernel mode
Câu 19: Cho tệp character.c chứa mã nguồn chương trình C như sau: static int dev_open(struct inode *inodep, struct file *filep) { printk("open\n"); return 0; } Trong hàm dev_open, lệnh printk("open\n") có chức năng gì?
Ghi thông điệp vào bộ đệm kernel để kiểm tra bằng lệnh dmesg
Ghi thông điệp vào file log của user space
Ghi thông báo lỗi khi không thể mở thiết bị
In thông báo trên màn hình console người dùng
Cho tệp character.c chứa mã nguồn chương trình C như sau:
static ssize_t dev_read(struct file* filep, char __user buf, size_t len, loff_t offset)
{
printk("read\n");
return 0;
}
Tham số char __user *buf trong hàm dev_read có vai trò gì?
Lưu kích thước của dữ liệu đọc
Lưu dữ liệu đọc từ thiết bị và chuyển đến không gian người dùng
Chứa dữ liệu để ghi vào thiết bị
Trỏ tới địa chỉ bộ đệm trong kernel
Cho tệp character_driver.c chứa mã nguồn chương trình C như sau:
#define P8_7_MODE_OFFSET 0x890
#define P8_8_MODE_OFFSET 0x894
Địa chỉ 0x890 và 0x894 tương ứng là gì trên board nhúng?
Địa chỉ vật lý của các cổng P8_7 và P8_8
Địa chỉ bộ nhớ dùng để lưu dữ liệu từ các cổng P8_7 và P8_8
Địa chỉ offset trong bộ nhớ để thiết lập chế độ của các cổng P8_7 và P8_8
Địa chỉ điều khiển mức điện áp của các cổng
Cấu trúc file_operations được sử dụng để làm gì trong character driver?
Lưu trữ dữ liệu của driver
Xác định các biến toàn cục của driver
Cấu hình quyền truy cập driver
Định nghĩa các hàm vận hành của driver
Hàm ioctl() trong character driver có chức năng gì?
Đọc dữ liệu từ thiết bị
Viết dữ liệu vào thiết bị
Đóng thiết bị
Giao tiếp điều khiển với thiết bị
Danh sách thiết bị nằm trong thư mục nào của hệ thống?
/dev
/opt
/etc
/usr
Device file đại diện cho đối tượng nào trong hệ thống Linux?
Một liên kết đến tập tin cấu hình
Một tập tin thông thường
Một thư mục ảo
Một thiết bị phần cứng cụ thể
Biến struct module *owner trong file_operations dùng để làm gì?
Cấu hình quyền truy cập file
Xác định quyền sở hữu của driver
Tránh việc giải phóng module khi driver đang được sử dụng
Xác định loại file driver
Cho tệp character.c chứa mã nguồn chương trình C như sau:
static void __exit exam_exit(void)
{
printk("goodbye, unregister major\n");
unregister_chrdev_region(dev, 1);
cdev_del(my_cdev);
}
Trong hàm exam_exit, dòng lệnh nào sau đây chịu trách nhiệm gỡ bỏ cấu trúc cdev đã được tạo trong hàm init?
cdev_remove(dev);
cdev_del(my_cdev);
unregister_chrdev_region(dev, 1);
Cho tệp character_driver.c chứa mã nguồn chương trình C như sau:
static ssize_t dev_write(struct file* filep, const char __user buf, size_t len, loff_t offset)
{
unsigned int temp = 0;
iowrite32((1 << LED), (io + GPIO_SETDATAOUT));
temp = ioread32(io + GPIO_SETDATAOUT);
char *kernel_buf = kmalloc(len, GFP_USER);
unsigned int temp = 0;
}
Trong hàm dev_write, mục đích của lệnh ioread32(io + GPIO_SETDATAOUT) là gì?
Ghi giá trị vào chân GPIO
Cấp phát bộ nhớ cho chân GPIO
Đọc trạng thái hiện tại của chân GPIO
Xóa dữ liệu tại chân GPIO
Device tree trong Linux là gì?
Một tập lệnh chạy trong kernel
Một ngôn ngữ lập trình phần cứng
Một file cấu hình hệ điều hành
Một chuẩn mô tả phần cứng
File device tree thường được lưu với phần mở rộng nào?
.dev
.dtb hoặc .dts
.txt
.cfg
Định dạng nhị phân của device tree được sử dụng trong Linux có phần mở rộng là gì?
.xml
.dtb
.cfg
.dts
Trong lập trình device tree trên Linux, hàm probe được sử dụng làm gì khi được gọi?
Để kiểm tra trạng thái của thiết bị
Nhận thông tin từ device tree và thực hiện các thao tác khởi tạo cho thiết bị
Để xóa bỏ thiết bị khỏi kernel
Để khởi động lại thiết bị
Trong device tree, "compatible" là gì?
Chỉ định địa chỉ của thiết bị
Thuộc tính mô tả thiết bị phần cứng có tương thích với hệ điều hành hay không
Giá trị cấu hình cho driver
Tên của device tree
Khi nào các thuộc tính trong device tree thường được khai báo là "disabled"?
Khi thiết bị không sử dụng
Khi driver chưa được cài đặt
Khi thiết bị gặp lỗi phần cứng
Khi kernel khởi động lại
Khi khởi động, kernel đọc được thông tin cổng USB trong device tree sau đó kernel sẽ xử lý thế nào?
Xác định loại hệ điều hành đang chạy có tương thích với loại USB đó hay không
Kiểm tra tốc độ xử lý của USB
Xác định thiết bị có cổng USB và gọi driver USB tương ứng
Kiểm tra dung lượng bộ nhớ USB
Quá trình khởi động của các hệ điều hành hiện đại sử dụng device tree khác gì so với hệ điều hành phiên bản cũ?
Hệ điều hành hiện đại không cần quét phần cứng mà chỉ đọc thông tin phần cứng từ device tree
Hệ điều hành cũ tự động sinh device tree
Hệ điều hành cũ có tốc độ xử lý device tree nhanh hơn
Hệ điều hành hiện đại không cần device tree
Khi cấu trúc device tree cần thêm phần cứng mới, người dùng cần làm gì?
Thay đổi file .dtb
Cập nhật BIOS
Sửa file .dts và nạp lại các file .dtsi
Sửa file kernel
Khi nào kernel sẽ gọi driver tương ứng cho thiết bị trong device tree?
Khi thiết bị được xác định là tương thích thông qua thuộc tính "compatible"
Khi file device tree được tải lên hệ thống
Khi cấu hình thiết bị được lưu trong thư mục /etc/
Khi thiết bị có mã nguồn mở
Câu lệnh nào dùng để chuyển đổi từ file .dts sang .dtb?
gcc
make
compile
dtc
Nếu muốn thay đổi thông số phần cứng của một thiết bị trong device tree cần thực hiện điều gì?
Sửa trực tiếp file .dtb đang chạy
Sử dụng trình điều khiển driver để cập nhật thông số
Khởi động lại thiết bị và quét lại phần cứng
Sửa file .dts tương ứng và biên dịch lại thành file .dtb
Cho một file my_device.dts trong Linux, lệnh nào sau đây được sử dụng để biên dịch file my_device.dts thành file nhị phân my_device.dtb?
dtc -I dts -O dtb -o my_device.dtb my_device.dts
gcc -I dts -O dtb -o my_device.dtb my_device.dts
compile -c -I dts -O dtb my_device.dts
make -I dts -O dtb -o my_device.dtb my_device.dts
Trong đoạn code dưới đây: /dts-v1/; / { compatible = "myboard"; my_device: my_device@0 { compatible = "mycompany,my_device"; reg = <0x00>; status = "okay"; }; }; Địa chỉ của thiết bị my_device được xác định tham số nào và có giá trị bằng bao nhiêu?
Địa chỉ của thiết bị my_device được xác định bởi tham số status, và giá trị là "okay".
Địa chỉ của thiết bị my_device được xác định bởi tham số compatible, và giá trị là "myboard".
C. Địa chỉ của thiết bị my_device được xác định bởi tham số compatible, và giá trị là "mycompany,my_device".
D. Địa chỉ của thiết bị my_device được xác định bởi tham số reg, và giá trị là 0x00.
Trong cấu trúc platform_driver như sau:
static struct platform_driver my_device_driver = {
.driver = {
.name = DRIVER_NAME,
.of_match_table = my_device_of_match,
},
.probe = my_device_probe,
.remove = my_device_remove,
};
Thuộc tính .driver có vai trò gì?
Để quản lý các hành động khi gỡ bỏ driver.
Để xác định các thông tin liên quan đến driver, bao gồm tên driver và bảng so khớp với device tree.
Để lưu trữ các thông số phần cứng của thiết bị.
Để chỉ định tên của thiết bị và các tài nguyên phần cứng cần thiết.
Lợi ích chính của việc dùng device tree trong Linux là gì?
Hỗ trợ bảo mật cho hệ thống
Tăng hiệu suất chạy chương trình
Cung cấp thông tin phần cứng chi tiết và dễ chỉnh sửa.
Tạo ra mã nhị phân dễ dàng
Hàm remove() trong device tree có nhiệm vụ gì?
Giải phóng tài nguyên và dọn dẹp khi thiết bị bị tháo.
Đặt tên cho thiết bị trong device tree
Nạp các thông tin cần thiết khi thiết bị được phát hiện
Khởi tạo cấu trúc dữ liệu cho driver
Cách thức để tích hợp device tree vào trong kernel là gì?
Compile trực tiếp thành mã nhị phân
Include trong mã nguồn kernel
Thêm vào tập tin cấu hình module
Biên dịch dưới dạng file .dtb.
Cấu trúc của một node trong device tree thường bao gồm các thành phần nào?
Chỉ có các thuộc tính
Tên node và các thuộc tính.
Chỉ có tên device
Định nghĩa hàm và tên node
Trong file device tree dưới đây:
/dts-v1/;
/ {
compatible = "myboard";
my_device: my_device@0 {
compatible = "mycompany,my_device";
reg = <0x00>;
status = "okay";
};
};
Thuộc tính "status" dùng để làm gì?
Chỉ ra loại driver tương thích với thiết bị
Xác định trạng thái của thiết bị có hoạt động bình thường không.
Chỉ ra thời gian hoạt động của thiết bị theo thời gian thực
Chỉ ra model của thiết bị
Khi driver có chứa hàm probe, điều gì sẽ xảy ra khi kernel phát hiện thiết bị phù hợp trong device tree?
Kernel sẽ gọi hàm probe để khởi tạo thiết bị và tài nguyên
Kernel sẽ yêu cầu người dùng xác nhận thiết bị trước khi gọi hàm probe
Kernel sẽ gọi hàm remove
Kernel sẽ nạp driver mà không gọi hàm probe
Thuộc tính compatible trong device tree có ý nghĩa gì đối với hàm probe?
Giúp hệ điều hành liên kết driver với thiết bị phù hợp
Xác định địa chỉ bộ nhớ của thiết bị
Thông báo trạng thái thiết bị
Đặt tên cho thiết bị trong hệ điều hành
Trong đoạn mã dưới đây:
static int my_device_probe(struct platform_device *pdev)
{
pr_info("my_device: probe function called\n");
struct resource *res;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
pr_info("my_device: resource start = 0x%lx, end = 0x%lx\n",
(unsigned long)res->start, (unsigned long)res->end);
return 0;
}Hàm platform_get_resource được sử dụng để làm gì?
Xác định phiên bản của thiết bị xác định thông số cấu hình cần của thiết bị
Lấy thông tin về trạng thái của thiết bị là đang hoạt động hay không
Lấy tên của thiết bị từ kernel ghi thông tin vào file log của kernel
Lấy thông tin về các tài nguyên của thiết bị đã được định nghĩa trong device tree
Cho cấu trúc of_device_id trong device tree như sau:
static const struct of_device_id my_device_of_match[] = {
{ .compatible = "KTMT,my_device" },
{},
};
Đoạn mã trên được sử dụng để làm gì?
Đoạn mã khai báo cấu trúc of_device_id để tìm kiếm các thiết bị tương thích với driver có compatible là "KTMT,my_device" trong device tree
Đoạn mã khai báo cấu trúc of_device_id để tạo driver cho các thiết bị không được mô tả trong device tree
Đoạn mã khai báo cấu trúc of_device_id để đăng ký driver cho các thiết bị không có thuộc tính compatible
Đoạn mã khai báo cấu trúc of_device_id để kết nối driver với hệ điều hành
Khi nào thì hệ điều hành đọc device tree?
Khi khởi động hệ thống
Khi biên dịch kernel
Khi tải module
Khi cài đặt phần mề
Khi tạo một file device tree .dts trong Linux, bạn muốn mô tả một thiết bị với tên my_device và địa chỉ bộ nhớ là 0x1000. Câu lệnh nào sau đây là chính xác để mô tả thiết bị này trong file .dts?
/dts-v1/; { my_device: my_device@0x1000 { type = "mycompany,my_device"; reg = <0x1000>; active = "yes"; }; };
/dts-v1/; { my_device: my_device@0x1000 { compatible = "mycompany,my_device"; reg = <0x1000>; status = "okay"; }; };
/dts-v1/; { my_device: my_device@0x1000 { compatible = "mycompany,my_device"; addr = <0x1000>; status = "active"; }; };
/dts-v1/; { my_device: my_device@0x1000 { compatible = "mycompany,my_device"; address = <0x1000>; status = "enabled"; }; };
Trong file device tree dưới đây:
/dts-v1/;
/ {
compatible = "myboard";
my_device: my_device@0 {
compatible = "KTMT,my_device";
reg = <0x00>;
status = "okay";
};
};
Thuộc tính compatible của thiết bị my_device có ý nghĩa gì?
compatible chỉ định tên của thiết bị và giúp hệ điều hành nhận diện thiết bị để tải driver tương ứng.
compatible chỉ ra rằng thiết bị này không thể sử dụng bất kỳ driver nào và cần một driver tùy chỉnh.
compatible dùng để chỉ định loại bộ xử lý mà hệ điều hành sẽ sử dụng cho thiết bị này.
compatible xác định phiên bản của kernel mà thiết bị này hỗ trợ.
Sự khác nhau về cách lập trình driver giữa Device tree và character driver như thế nào?
Sử dụng file mô tả phần cứng thay cho các macro define trong code
Sử dụng ngôn ngữ Assembly nhúng vào code của ngôn ngữ C
Sử dụng script Python để mô tả các thông số thiết bị phần cứng
Sử dụng JSON để mô tả cách thiết bị kết nối với hệ điều hành
Trong code driver, hàm API nào thường được sử dụng để đọc thuộc tính từ device tree?
ioremap()
module_init()
of_property_read()
alloc_chrdev_region()
Qt Creator là gì?
Một ngôn ngữ lập trình.
Một IDE tích hợp dành cho phát triển ứng dụng với Qt.
Một module xử lý file XML.
Một thư viện chính của Qt.
Device và Kits trong Qt dùng để làm gì?
Thiết kế giao diện đồ họa.
Quản lý file nhị phân.
Cấu hình mạng trong ứng dụng.
Biên dịch mã nguồn cho các thiết bị cụ thể.
Phương thức nào được sử dụng để thay đổi giá trị của thuộc tính?
Phương thức thay đổi có tên bắt đầu bằng "set."
Phương thức const.
Phương thức private.
Phương thức hằng.
Qt Creator được sử dụng để làm gì?
Biên dịch mã nguồn Python.
Là IDE phát triển giao diện đồ họa và chương trình console.
Quản lý cơ sở dữ liệu trong Qt.
Chỉnh sửa hình ảnh trong các ứng dụng Qt.
Tại sao cần biên dịch lại chương trình khi chạy trên các hệ điều hành khác nhau khi sử dụng Qt?
Để tránh lỗi biên dịch.
Để tạo file nhị phân phù hợp với hệ điều hành.
Để tối ưu mã nguồn.
Vì Qt không hỗ trợ cross-platform.
"Device" trong Qt có nghĩa là gì?
Thiết bị phần cứng mà ứng dụng sẽ chạy.
Tên ứng dụng Qt.
Một file nhị phân.
Một module đặc biệt của Qt.
Widget trong Qt thường được sử dụng với mục đích nào?
Quản lý mã nguồn của ứng dụng.
Hiển thị thông báo lỗi khi chương trình gặp sự cố.
Cung cấp các thành phần giao diện người dùng như nút bấm, ô chọn.
Quản lý kết nối mạng trong chương trình.
Câu lệnh nào sau đây được sử dụng để cài đặt Qt Creator trên hệ điều hành Linux dựa trên Debian/Ubuntu?
install qtcreator sudo
sudo install qt-creator
sudo apt-get install qtcreator
apt-get qtcreator install
Cho tệp main.cpp chứa mã đoạn nguồn như sau:
#include
Cung cấp các hàm toán học để tính toán trên giao diện.
Quản lý các kết nối mạng trong ứng dụng.
Tạo các widget cơ bản như cửa sổ và nút bấm.
Khởi tạo một đối tượng của lớp QApplication để quản lý toàn bộ ứng dụng Qt.
Điều gì xảy ra nếu không gọi phương thức show() khi tạo một nút bấm (QPushButton) trong Qt?
Nút bấm sẽ không phản hồi sự kiện nhấn.
Nút bấm sẽ không được hiển thị trên giao diện.
Nút bấm sẽ tự động hiển thị khi ứng dụng chạy.
Nút bấm sẽ hiển thị nhưng không thể thay đổi kích thước.
Các thành phần của cửa sổ trong Qt được gọi là gì?
GUI
widget
button
module
Nút bấm trong Qt thường được sử dụng để làm gì?
Kích hoạt một hành động hoặc sự kiện.
Lưu trữ dữ liệu.
Hiển thị thông báo lỗi.
Kết nối cơ sở dữ liệu.
Cho tệp main.cpp chứa mã đoạn nguồn như sau:
#include
Tạo ra một đối tượng của lớp QApplication có tên là app, nhận hai tham số từ hàm main() là argc và argv.
Tạo một đối tượng của lớp QApplication để quản lý các widget trong ứng dụng mà không cần dùng tham số.
Khởi tạo cửa sổ chính và thiết lập tham số argc và argv làm tham số mặc định.
Thiết lập giao diện đồ họa cơ bản cho ứng dụng Qt mà không cần tham số.
Đoạn mã sau sẽ tạo ra giao diện như thế nào? #include #include int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel label("Xin chào Qt!"); label.show(); return app.exec(); }
Một cửa sổ ứng dụng Qt không hiển thị bất kỳ widget nào.
Một cửa sổ với nhãn (label) "Xin chào Qt!" và một nút bấm với nhãn "Ok" mặc định.
Một cửa sổ hiển thị một nhãn với nội dung "Xin chào Qt!".
Một cửa sổ hiển thị nút bấm có nhãn "Xin chào Qt!".
Câu 16: Ưu điểm chính của Qt là gì?
Chạy nhanh hơn tất cả framework khác.
Chỉ cần biên dịch 1 lần và chạy được trên mọi nền tảng.
Hỗ trợ đa nền tảng với giao diện đồng nhất.
Không hỗ trợ lập trình mạng.
Câu 17: Trong lập trình Qt thì Signal và Slot có vai trò chính của là gì?
Signal là phương thức để thay đổi trạng thái của widget.
Signal là thuộc tính chứa giá trị của widget.
Signal phát ra khi có sự kiện, thông báo cho các Slot đã kết nối với nó.
Signal được dùng để xử lý logic khi có sự kiện xảy ra.
A.#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QPushButton button = new QPushButton();
button->setText("Xin chào");
return app.exec();
}
B.#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QPushButton button;
button.setLabel("Xin chào");
button.show();
return app.exec();
}
C. #include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QPushButton button("Xin chào");
button.show();
return app.exec();
}
D.#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QPushButton button;
button.setText("Xin chào");
button.setGeometry(50, 50, 100, 30);
button.show();
return app.exec();
}
Câu 18: Cho đoạn code sau:
#include
Hiển thị nút bấm trên giao diện.
Tạo một nút bấm mới.
Kích hoạt sự kiện nhấn nút.
Thay đổi văn bản trên nút bấm.
Câu 19: Cho đoạn code sau:
#include
Hiển thị một thông báo chào mừng người dùng.
Tạo cửa sổ chính cho ứng dụng.
Khởi động giao diện đồ họa và bắt đầu vòng lặp sự kiện.
Cài đặt cấu hình cho các widget trong ứng dụng.
Câu 20: Cho đoạn code tạo cửa sổ giao diện trong Qt:
#include
A. Tạo cửa sổ giao diện chính với các chức năng như menu, thanh công cụ.
B. Tạo một cửa sổ con không có thanh công cụ.
C. Tạo cửa sổ hiển thị thông báo cho người dùng.
D. Tạo một cửa sổ chỉ chứa các widget mà không có thanh tiêu đề.
Cách gọi phương thức setText() để thay đổi văn bản hiển thị của một QPushButton?
button.setText("OK")
button.setText = "OK";
button.changeText("OK");
button.text("OK");
Cho tệp main.cpp chứa mã đoạn nguồn như sau:
#include <QApplication>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
}
Điều gì sẽ xảy ra nếu chương trình không có lệnh return app.exec();?
Chương trình không thể biên dịch báo lỗi do thiếu vòng lặp sự kiện chính.
Chương trình vẫn khởi động bình thường nhưng không hiển thị bất kỳ cửa sổ giao diện đồ họa nào.
Chương trình không thực hiện gì.
Chương trình hiển thị giao diện nhưng không phản hồi bất kỳ sự kiện nào từ người dùng.
Module nào được sử dụng để lập trình giao diện trong Qt?
Module SQL
Module SVG
Module OpenGL
Module GUI
Cho tệp main.cpp chứa mã đoạn nguồn như sau:
#include <QApplication>
int main (int argc, char *argv[]) {
QApplication app(argc, argv);
return app.exec();
}
Vai trò của dòng lệnh return app.exec(); là gì?
Gọi phương thức exec() của đối tượng app để tạo cửa sổ chính mà không cần vòng lặp sự kiện.
Gọi phương thức exec() của đối tượng app để khởi động chương trình và hiển thị cửa sổ, đồng thời trả về kết quả để thông báo chương trình có diễn ra bình thường không.
Dừng vòng lặp sự kiện của ứng dụng và trả về giá trị thông báo lỗi nếu có.
Kết thúc chương trình và trả về giá trị mặc định cho hệ điều hành.
Cho đoạn mã sau:
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QPushButton nutBam("Chào mừng bạn đến với Qt!");
nutBam.resize(400, 200);
nutBam.show();
return app.exec();
}
Khi chạy chương trình kết quả hiển thị giao diện như thế nào?
Khi chạy chương trình kết quả hiển thị giao diện như thế nào?
Đoạn mã này sẽ tạo ra một cửa sổ với một nút bấm có nhãn "Chào mừng bạn đến với Qt!" và kích thước 400x200 pixels.
Đoạn mã này sẽ tạo ra một cửa sổ có tiêu đề "Chào mừng bạn đến với Qt!".
Đoạn mã này sẽ tạo ra một cửa sổ với một textbox hiển thị "Chào mừng bạn đến với Qt!" và kích thước 400x200 pixels.
Đoạn mã này sẽ tạo ra một cửa sổ với một nhãn "Chào mừng bạn đến với Qt!".
Cho tệp main.cpp chứa mã đoạn nguồn như sau:
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QPushButton button("Nhấn tôi!");
button.setGeometry(100, 100, 200, 50);
QObject::connect(&button, &QPushButton::clicked, [&]() {
button.setText("Đã nhấn!");
});
button.show();
return app.exec();
}
Trong đoạn mã trên, câu lệnh nào chịu trách nhiệm hiển thị giao diện chính của ứng dụng?
QApplication app(argc, argv);
QPushButton button("Nhấn tôi!");
return app.exec();
button.show();
Trong quá trình cài đặt Qt trên hệ điều hành nhúng, tại sao cần cài đặt Device và Kits?
Để biên dịch chương trình phù hợp với kiến trúc của thiết bị.
Để thêm tính năng kết nối mạng.
Để tối ưu hóa bộ nhớ trong.
Để hỗ trợ giao diện người dùng (UI).
Module SVG trong Qt có chức năng gì?
Tạo các hiệu ứng hoạt hình cho widget.
Tăng tốc hiệu năng xử lý hình ảnh.
Biên dịch mã SVG sang mã C++ trực tiếp.
Hiển thị đồ họa vector mở rộng trong giao diện ứng dụng.
Cho đoạn code sau:
MyWindow() {
QPushButton *button = new QPushButton("Click me", this);
button->resize(200, 100);
button->move(100, 100);
connect(button, &QPushButton::clicked, this, &MyWindow::........);
}
Điền vào chỗ trống sự kiện thích hợp được kích hoạt khi nhấn vào nút bấm trong Qt?
onClick().
onPress().
onActivate().
onSelect().
Sau khi biên dịch kernel, bước tiếp theo trong quy trình phát triển hệ điều hành nhúng?
Tạo partition trên bộ nhớ
Cài đặt bootloader
Biên dịch ứng dụng người dùng
Tạo hệ thống file
Board nhúng thường được sử dụng trong các ứng dụng nào?
Điều khiển hệ thống nhúng và IoT
Xử lý văn bản
Thiết kế đồ họa
Phát triển ứng dụng di động
Trình biên dịch nào được sử dụng để biên dịch kernel trong quy trình phát triển hệ điều hành nhúng?
Clang
Javac
Visual Studio
GCC
Trước khi tạo uImage bằng mkimage, bạn cần cài đặt công cụ hỗ trợ. Trên hệ điều hành Ubuntu, lệnh nào sau đây là đúng để cài đặt công cụ cần thiết?
sudo install mkimage
sudo apt install uboot-tools
apt-get uboot-image
apt-get install mkimage-tools
Cho tệp character.c chứa mã nguồn chương trình C như sau: c Sao chép mã static void __exit exam_exit(void) { printk("goodbye, unregister major\n"); unregister_chrdev_region(dev, 1); cdev_del(my_cdev); } Trong hàm exam_exit, dòng lệnh nào sau đây chịu trách nhiệm gỡ bỏ cấu trúc cdev đã được tạo trong hàm init?
cdev_unregister(my_cdev);
unregister_chrdev_region(dev, 1);
cdev_remove(dev);
cdev_del(my_cdev);
