Tại sao có nhiều nhân Android khác nhau (xin vui lòng trả lời kỹ thuật)


17

Không phải Android là một hạt nhân phổ biến được sử dụng trên tất cả các thiết bị? Ví dụ, CentOS sẽ cài đặt trên Dell, HP và một loạt các phần cứng khác. Chắc chắn có các mô-đun khác nhau nhưng dù sao nó vẫn là CentOS.

Lý do tại sao CyanogenMod luôn bị "hỏng"? Tôi luôn nghe thấy trong các diễn đàn họ đang làm việc về việc chuyển trình điều khiển này hoặc trình điều khiển đó. Nếu họ sử dụng cùng một kernel, trình điều khiển sẽ không hoạt động với nó? Tôi cũng thấy một triệu loại Kernels khác nhau cho các thiết bị khác nhau.

Câu trả lời:


24

Kernels khác nhau từ nhà sản xuất để nhà sản xuất. Rất nhiều hạt nhân đến từ dòng nguồn nguyên liệu thuần túy được tìm thấy trên CAF, những gì các nhà sản xuất này làm là lấy các nguồn chứng khoán đó, sửa đổi chúng cho phù hợp dựa trên bo mạch / chipset được sử dụng, đồng thời, thực hiện trình điều khiển riêng của họ.

Hãy nhìn xung quanh bạn, có các biến thể của màn hình cảm ứng, các biến thể của chipset wifi, chưa kể, gia tốc kế, cảm biến, pin, la bàn, âm thanh, đồ họa.

Lấy một nguồn nhân từ HTC chẳng hạn sẽ không hoạt động trên Samsung và ngược lại.

Các nhà sản xuất có thể tự do chọn các bit khác nhau hoặc lấy nguồn khác nhau được tích hợp vào bảng mạch. Không có quy tắc cứng hoặc nhanh liên quan. Do đó rất nhiều hack / sửa đổi để kernel hoạt động đúng.

Bạn không bao giờ được so sánh với các hạt nhân phân phối Linux trên máy tính để bàn trong đó nó có PCI, PCI-Express, SATA, VGA, SVGA, USB, Ethernet vì chúng là một trò chơi bóng hoàn toàn khác nhau. Sự khác biệt chính với CentOS và với Linux Kernel của Android là thế này - TẤT CẢ các trình điều khiển được biên dịch dưới dạng mô-đun hoặc tích hợp sẵn, do đó mọi phân phối Linux sẽ chỉ đơn giản là "hoạt động bình thường". Một lần nữa, với các bản phân phối Linux trên máy tính để bàn - bạn có một kiến ​​trúc - x86 do đó, một nhân Linux từ PC Dell, có thể hoạt động vượt trội trên Lenovo với điều kiện các trình điều khiển tiêu chuẩn không được biên dịch.

Đừng quên, trong thế giới Android, có các biến thể của hạt nhân được xây dựng cho các chipset ARM cụ thể, như ARMv6, ARMv7, có TEGRA, có EXYNOS và chúng không tương thích nhị phân với nhau. Do đó, nếu một kernel được biên dịch cho TEGRA, hãy quên nó đi, nó sẽ không hoạt động trên ARMv7!

Lý do một số hạt nhân trên Android dường như bị "phá vỡ" là do nhà sản xuất. Một số (Zte là một ví dụ rất hay) phát hành một nguồn bị đánh cắp có thể biên dịch từ nguồn nhưng không khởi động được do trình điều khiển bị thiếu không có trong giấy phép GPLv2 hoặc GPLv3. Đó là vấn đề, do đó một số tin tặc phải lùng sục khắp nơi để tìm kiếm manh mối; Một số nhà sản xuất, nếu không phải tất cả, làm theo. Phiên bản hiện tại của nguồn Zte có ý định là 2.6,35,7, nhưng trên thực tế, cơ sở nguồn thực sự 2.6.32.9 của nó với rất nhiều sửa đổi do đó không đại diện cho nguồn hạt nhân thực sự cho 2.6,35.7!

Đây là nơi các nhà sản xuất phải phát hành các nguồn tương ứng của họ, không chỉ tuân thủ GPLv2 trở lên, mà là để cộng đồng có thể sửa đổi nó, chẳng hạn như thêm khả năng ép xung.

Do đó, việc hack có liên quan đến hậu trường và rất nhiều điều gây rối với các trình điều khiển đang cố gắng làm cho nó hoạt động và cũng không dễ gỡ lỗi .. Một số trình điều khiển có thể được cấp phép chéo, NHƯNG không thể được phân phối tùy theo điều khoản và điều kiện như thương lượng.

Rất may, giờ đây tất cả đã thay đổi với dòng nguồn 3.xx, vì trình điều khiển Android hiện được tích hợp vào các nguồn chính. Nhưng có một vấn đề!

Hãy thử chuyển kernel 3.xx sang thiết bị cầm tay hiện có khoảng 12-18 tháng tuổi; Không phải cơ hội của một quả cầu tuyết trong địa ngục sẽ hoạt động, bởi vì, do các yếu tố khác nhau, các nguồn 3.xx khác rất nhiều so với nguồn 2.6.x và sẽ mất rất nhiều hack để làm cho nó hoạt động - tôi nên biết, đã thử chuyển nguồn 2.6,38.6 cho Zte Blade và không thành công.

Tương tự, bản phát hành kernel 3.0.1 mới nhất - khi làm việc với dự án ics4blade trên Modaco, đã thực hiện nhiều nỗ lực để chuyển nó nhưng điều đó cho thấy thực tế đơn giản là Zte đã tạo ra một mớ hỗn độn rất tệ về nguồn mà không thể chuyển được. .


Nâng cao tất cả xung quanh !!! Cảm ơn các câu trả lời chi tiết.
user974896

Bạn được chào đón! Có thứ gì bạn cần phải biết nữa không! : D
t0mm13b

Từ những gì bạn đang nói, các trình điều khiển không phải là tất cả được biên dịch dưới dạng các mô-đun mà được tích hợp vào chính Hạt nhân, vì vậy ngay cả khi CM có nhân hoạt động trên thiết bị, nó không thể đơn giản là "di chuyển các mô-đun XXX" sang bản dựng mới và nó hoạt động vì có thể không có moduels XXX. Các trình điều khiển phải được săn lùng, hack (có thể) và biên dịch lại.
dùng974896

2
Chính xác, và các trình điều khiển cũng khác nhau, do đó, một trình điều khiển cho màn hình cảm ứng trên một thiết bị cầm tay sẽ không hoạt động trên một thiết bị cầm tay khác sử dụng màn hình cảm ứng khác. Ngoài ra, một điểm quan trọng khác cần lưu ý - một số trình điều khiển phụ thuộc vào phiên bản kernel - Zte đã đưa ra phiên bản trình điều khiển Atheros Wifi cho Blade và trình điều khiển sẽ không hoạt động trừ khi kernel là phiên bản 2.6.35.7, bất kỳ phiên bản nào khác, ngắt wifi - điều này là để chứng minh sự phụ thuộc theo cách khá rắc rối và hỏng hóc khi làm những việc như thế.
t0mm13b

12

Kiến trúc PC được xây dựng xung quanh các bộ phận hàng hóa vì nó bắt đầu là bản sao của một sản phẩm cụ thể, PC của IBM, được thiết kế đặc biệt để tương thích với nó và do đó với nhau. Nói chung, bạn có thể lấy một chương trình hoặc thiết bị ngoại vi từ một PC tương thích và đặt nó vào một thiết bị khác, và mong đợi nó hoạt động. Khả năng đó đủ hữu ích để mọi người tiếp tục yêu cầu nó ngay cả khi công nghệ phát triển. Bạn có thể đặt thẻ PCI Express vào bất kỳ PC hiện đại nào giống như bạn có thể đặt thẻ ISA vào bất kỳ PC nào được sao chép trước đó.

Điện thoại thông minh không có lịch sử như vậy. Chúng được thiết kế dưới dạng các sản phẩm nguyên khối, một hệ thống hoàn chỉnh bao gồm phần cứng và phần mềm "chỉ hoạt động" như hiện tại. Không có hy vọng rằng mọi người sẽ lấy các bộ phận ra khỏi một chiếc điện thoại và đặt chúng vào một chiếc điện thoại khác, vì vậy các kỹ sư không phải tính đến khả năng tương tác khi họ thiết kế sản phẩm của họ.

Ngay cả trong cây nguồn Linux, có rất nhiều phân mảnh trong trình điều khiển cho các nền tảng ARM . Vì điện thoại thường được thiết kế sau cánh cửa đóng kín, các nhóm kỹ thuật tại các công ty khác nhau thường kết thúc công việc trùng lặp, thiết kế phần cứng cơ bản giống như đối thủ và sau đó viết trình điều khiển riêng cho thiết kế của riêng họ. Sau khi hoàn thành và sản phẩm được phát hành, họ sẽ tiếp tục làm việc tiếp theo; không đáng để họ quay lại và cấu trúc lại trình điều khiển cho các sản phẩm trong quá khứ hoặc hợp nhất chúng với trình điều khiển của đối thủ cạnh tranh. Kết quả là rất nhiều trình điều khiển một lần cho các thiết bị tương tự nhưng không hoàn toàn giống nhau.

Ngoài ra, điện thoại thông minh thường dựa trên SOC có phần cứng chuyên dụng được tích hợp cùng với bộ xử lý. Đối với một số điều này, vấn đề là có nên tải hay không tải một trình điều khiển nhất định; toàn bộ hạt nhân có thể cần được xây dựng với các tùy chọn cấu hình đặc biệt để chạy trên một SOC, không tương thích với các tùy chọn đặc biệt cần thiết để chạy trên SOC khác.


5

Lý do là vì nhân Linux của Android thường không được biên dịch trên chính Android, thay vào đó, nó phải được biên dịch chéo từ một máy tính khác. Điều này gây ra nhiều vấn đề khác nhau, vì cấu hình thiết bị không khả dụng vào thời gian biên dịch và không thể biên dịch kernel chung với tất cả các trình điều khiển do giới hạn không gian (trong khi hầu hết các bản phân phối trên máy tính để bàn đều được biên dịch vào các mô-đun được tải từ initramfs) . Do đó, các nhà phát triển đã phải tìm ra trình điều khiển nào để đóng gói cho từng thiết bị cụ thể. Không chỉ vậy, mỗi trình điều khiển thường có hàng tá tùy chọn biên dịch thời gian để chuyển đổi các tính năng trình điều khiển khác nhau và các nhà sản xuất thường không phát hành cấu hình chính thức của họ (những người phạm tội tồi tệ nhất thậm chí không mở trình điều khiển của họ, hoặc không theo kịp bản sao của các trình điều khiển cập nhật).

Lập trình trình điều khiển khó hơn nhiều so với lập trình ứng dụng, vì không có hạt nhân nào bảo vệ bạn khỏi phần cứng hay thay đổi có yêu cầu thời gian thực cụ thể và như vậy, và điều này có nghĩa là thậm chí có một đặc tính hiệu suất khác có thể khiến trình điều khiển bỏ lỡ một số sự kiện thời gian thực cứng từ phần cứng; những lỗi này có thể xuất hiện dưới dạng lỗi hoặc vấn đề hiệu năng.

Một vấn đề khác là không tương thích nhị phân. Có hai nguyên nhân của tính không tương thích nhị phân, đầu tiên là loại CPU, được bao phủ bởi t0mm13b, nhưng vấn đề khác liên quan đến porting là không tương thích ABI (giao diện nhị phân của ứng dụng). Nếu các nhà sản xuất không mở trình điều khiển của họ, thì các nhà phát triển phải sử dụng mô-đun được biên dịch từ ROM stock. Điều này đặt ra nhiều vấn đề không tương thích ABI khác nhau, vì bản thân các mô-đun trình điều khiển có những kỳ vọng cụ thể về, ví dụ, bố trí cấu trúc và tham số gọi hàm, và khi kernel được biên dịch, nó không có tệp tiêu đề để mô tả ABI tại thời điểm trình điều khiển được biên soạn, vì vậy các nhà phát triển phải thiết kế ngược trình điều khiển để tạo tệp tiêu đề hoặc các tệp tiêu đề trong cây nguồn có thể đã bị sửa đổi rất nhiều do trình điều khiển được biên dịch và các nhà phát triển phải hoàn nguyên các sửa đổi đó để làm cho hạt nhân tương thích trở lại với ABI của trình điều khiển. Không giống như biên dịch từ nguồn, biên dịch cho trình điều khiển nhị phân sẽ không gây ra lỗi biên dịch do tham số chức năng không tương thích hoặc không tương thích về cấu trúc, nó chỉ đơn giản là làm hỏng thiết bị của bạn trong khi nó đang chạy và việc gỡ lỗi những vấn đề này rất khó khăn. Trong thế giới PC, chúng ta đã quen với mớ hỗn độn mà nVidia và ATi để lại cho chúng ta, do họ khăng khăng phát hành trình điều khiển chỉ nhị phân, hãy tưởng tượng có mớ hỗn độn đó cho tất cả các trình điều khiển, hãy tưởng tượng "trò vui" mà nó tạo ra.

Phần cứng PC nói chung cũng được chuẩn hóa tốt hơn phần cứng di động, hầu hết các PC không cần trình điều khiển cho máy rung, gia tốc kế, con quay hồi chuyển, đài 3G, cảm biến tiệm cận, NFC, v.v. Ngay cả trên các thiết bị có 3G, nó thường kết nối với phần cứng bằng cách sử dụng tiêu chuẩn các kết nối như PCMCIA hoặc PCI-E.


4

Chà .... trình điều khiển và kernel không hoàn toàn giống nhau.

Trình điều khiển là những gì điều khiển ăng-ten di động, wifi, bluetooth, v.v ... Đây là những trình điều khiển độc quyền vì nhà sản xuất phải tạo ra một cách (trình điều khiển) để nói chuyện với phần cứng của họ.

Hạt nhân là một mức trung gian giữa HĐH / ứng dụng và trình điều khiển thực tế (hoặc cpu hoặc bộ nhớ hoặc bất kỳ phần cứng nào khác). Đó là những gì cho phép HĐH / ứng dụng của bạn giao tiếp với các thành phần phần cứng này.

Tất cả hàng triệu hạt nhân bạn thấy thực sự không khác biệt nhiều với nhau. Thông thường, một lập trình viên / người kiểm duyệt sẽ lấy kernel hiện có và "điều chỉnh" nó để thử và có được hiệu năng khác biệt từ nó. Về cơ bản, bạn có thể nói rằng họ chỉ điều chỉnh (phần lớn) "cấu hình" của kernel. Trong thế giới Android, các modder này chủ yếu nhìn vào: vượt hoặc giảm tốc độ xung nhịp CPU (quan trọng để tiết kiệm pin hoặc cố gắng chạy hầu hết các ứng dụng chuyên sâu như trình giả lập trò chơi video hoặc phát lại video) hoặc chúng đang xem xét bên dưới vặn vẹo (để tiết kiệm pin bằng cách chạy CPU của bạn bên ngoài các tham số cài đặt ban đầu của nó ... thay đổi tùy theo từng người vì không có hai CPU nào được làm giống hệt nhau 100%).


Ý tôi là ví dụ với CyanogenMod, luôn có những phàn nàn về wifi, bluetooth, v.v. của tôi không hoạt động. Tại sao các trình điều khiển này phải được "chuyển" sang CyanogenMod. Tại sao họ không thể lấy trình điều khiển chứng khoán, sao chép chúng vào thiết bị và chạy chúng với CyanogenMod
user974896

không có trình điều khiển "chứng khoán" cho các thiết bị. Mỗi thiết bị đều có các trình điều khiển khác nhau cho phần cứng như máy ảnh, chip wifi, v.v. Và chúng thường là nguồn đóng nên họ phải "hack" theo cách của mình thông qua việc khiến các trình điều khiển hoạt động.
Ryan Conrad

1
Có nhưng tại sao cần phải hack. Nếu chúng hoạt động với kernel OEM, tại sao bạn không thể di chuyển các tệp trình điều khiển và các thư viện liên quan đến cài đặt mod Cyanogen vì hạt nhân về cơ bản là giống nhau.
dùng974896

1

Điện thoại và các phần nhúng khác không có BIOS để cung cấp sự trừu tượng giữa phần cứng và HĐH do hệ điều hành được biên dịch cho phần cứng mà nó được triển khai. Ngay cả các thiết bị sử dụng cùng một bộ chip có thể được cấu hình theo các cách khác nhau (sử dụng các bus comms thay thế, v.v.) \ kết quả là hạt nhân phải được biên dịch tương ứng. Vì không có sự thay đổi trong phần cứng nên không có phát hiện phần cứng nào được thực hiện. Kernel khởi động nhanh hơn và nhỏ hơn do đó - đây là nguyên tắc chuẩn của HĐH nhúng


0

CentOS cài đặt trên phần cứng khác nhau, nhưng,

  1. Đó là tất cả các PC khác nhau ít hơn điện thoại,
  2. Một hạt nhân Ubuntu, hạt nhân Debian và hạt nhân sơ cấp là tất cả các nguồn hạt nhân khác nhau.

Đối với điểm thứ hai của bạn, xem (các) câu trả lời được đăng trước đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.