2012-07-29 39 views
16

Tôi đã phát triển trình điều khiển thiết bị Linux. Hiện tại tôi đang biên dịch nó trên Ubuntu 12.04 với trình biên dịch chéo cho cánh tay và sau đó insmoding nó trong hình ảnh Linux cánh tay của tôi. Nhưng tôi muốn tìm hiểu làm thế nào tôi có thể thêm nó trong mã nguồn Linux và cung cấp và tùy chọn để thêm/loại bỏ thông qua cấu hình của Linux cánh tay, để tôi có thể biên dịch nó với Linux mã nguồn biên dịch?Thêm mã trình điều khiển mới vào mã nguồn linux

Bất kỳ ý tưởng nào?

Trả lời

3

Tạo bản vá và thêm áp dụng bản vá này dưới dạng bước sau khi giải nén hạt nhân tarball và trước khi định cấu hình/biên dịch.

6

Bạn cần thêm tùy chọn cấu hình trong tệp Kconfig của thư mục con nguồn kernel mà trình điều khiển thiết bị của bạn sẽ được đặt. Bạn cũng cần thêm dòng vào Makefile của thư mục đó. Rõ ràng bạn cũng cần sao chép các tệp nguồn vào thư mục đó.

Kể từ khi lái xe của bạn phụ thuộc vào kiến ​​trúc ARM, trong Kconfig, bạn cần phải đặt một tùy chọn 'phụ thuộc vào' như:

config SND_ARMAACI 
tristate "ARM PrimeCell PL041 AC Link support" 
depends on ARM_AMBA 

và Makefile của bạn sẽ trông giống như

obj-$(CONFIG_SND_ARMAACI) += snd-aaci.o 
snd-aaci-objs  := aaci.o 

Vì vậy, bây giờ khi bạn thực hiện một menuconfig trong cây nguồn kernel, bạn sẽ tìm thấy tùy chọn config bạn đặt trong Kconfig và bạn sẽ có thể chọn nó được biên dịch vào kernel hoặc được xây dựng như một module hoặc không biên dịch chút nào.

Tìm các ví dụ trong thư mục hệ thống con mà trình điều khiển của bạn có ý nghĩa.

+0

Cảm ơn câu trả lời của bạn. Tôi đã tìm ra và làm điều tương tự như bạn đã đề cập. Nhưng bây giờ có một vấn đề mới. Khi tôi biên dịch mã trình điều khiển của tôi như là một mô-đun và làm insmod trong hạt nhân Linux, tôi có thể thấy thiết bị của tôi nhận được tạo dưới/dev /. Nhưng khi tôi đặt mã của tôi trong cây hạt nhân và biên dịch hạt nhân tôi không thể nhìn thấy thiết bị của tôi dưới/dev. Xin lưu ý rằng tôi đang sử dụng class_create() và device_create() để tạo nút thiết bị. Ngoài ra tôi đã thêm mã của tôi vào cây hạt nhân theo cách tương tự như bạn đã nêu ở trên. – Ravi

+0

Bạn đã đặt trình điều khiển được tích hợp chưa. Hãy nêu bật trình điều khiển và nhấn 'Y' sao cho nó được đặt trước bằng dấu sao như sau: [*] – microMolvi

35

Để vượt qua biên dịch trình điều khiển của riêng bạn trong kiến ​​trúc cánh tay, bạn phải làm theo một số bước như được đề cập bên dưới.

  1. Tạo thư mục như my_drvr bên trong trình điều khiển (có trong mã nguồn Linux) cho trình điều khiển của bạn và đặt tệp trình điều khiển (my_driver.c) bên trong thư mục này. Nó sẽ trông giống như /linux_source_code/drivers/my_drvr/my_driver.c

  2. Tạo một Makefile bên trong thư mục driver của bạn (sử dụng vi bất kỳ trình soạn) và bên này đưa obj-$(CONFIG_MY_DRIVER) += my_driver.o và lưu tập tin này.Điều này sẽ xuất hiện như /linux_source_code/drivers/my_drvr/Makefile

  3. Tạo một Kconfig tập tin bên trong thư mục driver của bạn (sử dụng vi bất kỳ trình soạn) và bên này đưa

    config MY_DRIVER 
    tristate "my driver" //gives your driver description like vendor name etc. 
    depends on ARM 
    default y if ARM 
    help 
        my driver module.
  4. Lưu tập tin này, điều này sẽ xuất hiện như /linux_source_code/drivers/my_drvr/Kconfig

  5. Thêm cả hai tập tin MakefileKconfig trong trình điều khiển nguồn Linux MakefileKconfig tệp có tại /linux_source_code/drivers/Makefile/linux_source_code/drivers/Kconfig

  6. Trong Makefile thêm dưới đây trong dòng cuối cùng

     obj-y += my_drvr/

    hoặc

     obj-$(CONFIG_MY_DRIVER) += my_drvr/
  7. Trong file Kconfig thêm dưới đây trong dòng cuối cùng

    source "drivers/my_drvr/Kconfig"
  8. Cuối cùng phải thêm Kconfig tệp vào kiến ​​trúc s tập tin cấu hình pecific mà sẽ có mặt tại kernel_source/arch/arm/configs/--defconfig trong tiện ích này dưới dòng trong cuối

    CONFIG_MY_DRIVER=y

Lưu ý: - Bước cuối cùng sẽ khác nhau theo kiến ​​trúc của bạn, do đó bạn có chăm sóc. Bây giờ bạn có thể biên dịch trình điều khiển của bạn bằng cách sử dụng lệnh make. (ví dụ: sun7i_defconfig)

+1

xuất sắc. chính xác và súc tích. cảm ơn bạn. –

Các vấn đề liên quan