Điểm:0

"$ make" và "$ make modules" làm gì khi biên dịch/xây dựng kernel?

lá cờ ph

Tôi đang cố gắng Xây dựng kernel đã cấu hình. Vì vậy, đồng nghiệp của tôi bảo tôi gõ vào thiết bị đầu cuối

chế tạo

sau đó sau đó

làm mô-đun

Tôi đã thử google nhưng kết quả gần nhất là cái này nhưng khi tôi cuộn xuống, nó hiển thị umake, không phải chế tạo.

lá cờ cn
Ray
Câu hỏi của bạn không liên quan gì đến Ubuntu - đó là nơi bạn mắc lỗi khi tìm kiếm trên Google. Thay vào đó, hãy bắt đầu từ [tại đây](https://en.wikipedia.org/wiki/Make_(software)).
waltinator avatar
lá cờ it
Đọc `man make`.
Điểm:0
lá cờ tj

Tôi sẽ đi vòng quanh để trả lời câu hỏi thực tế của bạn, nhưng tôi sẽ đi đường vòng để đến đó để bạn có ngữ cảnh tốt hơn.

tldr: Gói bạn cần là chế tạo hoặc xây dựng cần thiết. Bạn cần ở trong cùng thư mục với mã nguồn linux của mình và có tệp .config được định cấu hình (có vẻ như bạn đã làm rồi). Sau đó chạy các lệnh đó. Các từ khóa Google có thể trợ giúp là "biên dịch kernel linux"

Cho nên chế tạo là một hệ thống xây dựng. Nó cho phép bạn chạy một loạt lệnh biên dịch (hoặc thực sự là bất kỳ lệnh nào), theo cách đệ quy thông qua cấu trúc thư mục. Nó sử dụng một hệ thống đơn giản để chỉ biên dịch các chương trình có thay đổi.

Cho phép khai báo "mục tiêu". Theo truyền thống, một mục tiêu là một tên tệp và theo sau nó là các tệp mà nó phụ thuộc vào.

Vì vậy, một ví dụ đơn giản là:

helloworld: helloworld.c helloworld.h
    gcc helloworld.c -o helloworld

Điều này sẽ được lưu trữ trong một cuộc gọi tập tin Makefile và nó báo rằng để xây dựng tệp helloworld (nhị phân đã biên dịch), bạn chạy gcc helloworld.c -o helloworld và nếu helloworld đã tồn tại, đừng làm bất cứ điều gì trừ khi có những thay đổi đối với helloworld.c hoặc helloworld.h mới hơn tệp helloworld.

Nếu đây là quy tắc duy nhất trong makefile, chạy chế tạo sẽ gọi quy tắc này (vì nó là quy tắc đầu tiên) và cố gắng xây dựng Chào thế giới nhưng nó cũng có thể được gọi một cách rõ ràng bằng cách chạy làm helloworld

Tệp tạo tệp thường phức tạp hơn nhiều và có thể trông giống thế này hơn (đây là một ví dụ rất phức tạp và tôi nhận ra rằng tệp tạo tệp hầu như sẽ không bao giờ giống như thế này, nhưng nó rất tốt cho việc giải thích):

xin chào: xin chào.o libhello.o
    gcc xin chào.o libhello.o -o xin chào

xin chào.o: xin chào.c xin chào.h
    gcc -c xin chào.c -o xin chào.o

libhello.o: libhello.c libhello.h
    gcc -c libhello.c -o libhello.o

Vì vậy, nếu bạn chạy chế tạo hoặc chào hỏi tệp tạo này sẽ kiểm tra hello.o và libhello.o, nếu chúng không tồn tại, nó sẽ tìm kiếm các mục tiêu đó và do đó tìm ra cách tạo hello.o và libhello.o và SAU ĐÓ tạo tệp nhị phân xin chào như bạn đã yêu cầu ngay từ đầu. Điều này cho phép bạn chỉ định mức độ phụ thuộc tại một thời điểm và tìm ra thứ tự biên dịch mọi thứ để làm cho nó hoạt động (điều này cũng có thể tiết kiệm thời gian biên dịch nếu một trong các thư viện của bạn không thay đổi, bạn không cần biên dịch lại đối tượng đó ).

Bạn có thể chỉ định một mục tiêu mà không có bất kỳ phụ thuộc nào, trong trường hợp này, nó sẽ chỉ chạy nếu tệp mục tiêu không tồn tại. Hơn nữa, mục tiêu của bạn không nhất thiết phải là tệp được tạo theo quy tắc đó. Ví dụ:

dọn dẹp:
   rm xin chào *.o

Điều này cho phép bạn chạy Làm sạch và nó sẽ xóa tệp nhị phân đã biên dịch và các tệp đối tượng. Vì nó không thực sự tạo một tệp có tên dọn dẹp, mỗi khi bạn chạy Làm sạch quy tắc này được thực thi và dọn sạch thư mục làm việc của bạn. Đây được gọi là mục tiêu giả mạo và chúng được sử dụng khá thường xuyên. thực hiện cài đặt là một chương trình mà bạn có thể thấy thường xuyên để cài đặt một chương trình mà bạn đã tạo.

Quay lại câu hỏi ban đầu của bạn

Vì vậy, nhân linux sử dụng make để xây dựng. Nó có một loạt các mục tiêu giả mạo, khi ở thư mục gốc của nguồn Linux, hãy chạy giúp đỡ để cho bạn thấy các mục tiêu. Thông thường, bạn bắt đầu với một trong những mục tiêu khởi chạy một chương trình để giúp bạn xây dựng một .config tập tin. Đây sẽ là tạo cấu hình, tạo menuconfig, tạo xconfig, và một số người khác.

chế tạo sẽ chạy mục tiêu mặc định để biên dịch kernel bằng các tùy chọn được chỉ định trong tệp .config. làm mô-đun sẽ chỉ biên dịch các bit được đánh dấu là mô-đun trong .config tập tin. Giữa hai lệnh này, bạn sẽ kết thúc bằng một hạt nhân vmlinuz và một loạt các nhị phân mô-đun hạt nhân. Linux Kernel là gì/làm gì nằm ngoài phạm vi của bài đăng này, nhưng câu chuyện ngắn gọn là nó là phần mềm trung tâm của hệ điều hành (nếu toàn bộ hệ thống là một hạt, thì kernel sẽ là lõi trung tâm, phải không? ). Nó chạy ở mức đặc quyền cao nhất trên bộ xử lý và là phần mềm duy nhất tương tác trực tiếp với bộ nhớ và phần cứng, đồng thời tất cả phần mềm khác trên hệ thống sẽ nói chuyện với nhân để môi giới truy cập vào phần cứng. (có khoảng 20 cảnh báo trong phần mô tả đó, nhưng điều đó bao gồm 80% phổ biến nhất về cách thức hoạt động của mọi thứ).

Nhưng hy vọng rằng điều đó cung cấp cho bạn đủ ngữ cảnh để tìm kiếm thông tin hữu ích hơn, nếu bạn tìm kiếm "biên dịch kernel linux", bạn sẽ tìm được nửa tá tài nguyên ở mọi mức độ phức tạp. Hướng dẫn chính thức là tại linux.org, nhưng nó rất nhanh bị loại bỏ và không hữu ích lắm nếu đây là lần đầu tiên của bạn.

Trong Ubuntu (và hầu hết các bản phân phối), make nằm trong chế tạo gói, vì vậy nó được cài đặt với Sudo apt cài đặt thực hiện tuy nhiên, để xây dựng kernel, bạn cũng sẽ cần các chương trình khác, vì vậy bạn thường muốn cài đặt chuỗi công cụ xây dựng và các phụ kiện với Sudo apt cài đặt bản dựng cần thiết trong đó bao gồm làm.

lá cờ ph
Ngay trong trái tim. Cám ơn rất nhiều!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.