Làm cách nào để chạy tập lệnh khi khởi động trong CM12.1?


9

Hầu hết các câu hỏi tôi có thể tìm thấy liên quan đến vấn đề này là ngày 2011 và sau đó, vì vậy có lẽ không quá ngạc nhiên khi mọi thứ đã thay đổi kể từ đó. Tôi đã thử cả đống thứ, không có kết quả gì.

Có một số tập lệnh trong /system/etc/init.d(cũng xuất hiện dưới /etc/init.dthiết bị của tôi). Đặc biệt, có một 00bannerkịch bản được cho là để ghi lại một thông điệp chào mừng. Thông điệp chào mừng không bao giờ xuất hiện trong logcat.

Tôi đã đặt kịch bản của riêng mình ở đây, cuối cùng đã được giảm xuống thành không có gì ngoài điều này:

#!/system/bin/sh
log -t mytest Testing

Không có gì. Không bao giờ xuất hiện trong logcat trừ khi chạy thủ công qua thiết bị đầu cuối. Sau đó, nó hoạt động.

Ngoài ra còn có một 90userinittập tin ở đây, nó gọi /data/local/userinit.shnếu nó tồn tại. Tôi đã tạo ra nó với cùng nội dung như trên. Một lần nữa, không có gì xuất hiện trong logcat. Điều đó không đáng ngạc nhiên, thực sự, vì nếu 00bannerkhông chạy thì điều này cũng không.

Tôi đã tìm kiếm bất cứ thứ gì có tên "init.rc" nhưng không có gì giống như vậy tồn tại ở bất cứ đâu trên thiết bị của tôi.

Tất cả các tập lệnh của tôi có 755 quyền.

Tôi có thể thử cái gì khác? (ngoài các ứng dụng chạy tập lệnh cho tôi)


Kịch bản nào bạn muốn chạy, và tại sao?
không thể

Đáng buồn thay, số lượng đào nhỏ tôi đã làm dẫn đến "Sẽ không hoạt động trên các rom tùy chỉnh." Rõ ràng CM có cách làm việc riêng của họ. Không chắc chắn bạn muốn gây rối với nó. Nhưng rõ ràng bạn có thể xây dựng tệp boot.img của riêng bạn và thêm các tập lệnh tùy chỉnh của bạn vào đó. Có lẽ điều đó sẽ làm việc cho ya.
jer3my

@ jer3my Tôi hoàn toàn vui vẻ chấp nhận đó là câu trả lời thực tế và chỉ định tiền thưởng nếu bạn có các liên kết mà tôi sẽ thấy có sức thuyết phục / có thẩm quyền.
RomanSt

Tôi sẽ đăng câu trả lời trong giây lát, cũng tìm thấy một cái gì đó khác có thể giúp bạn.
jer3my 16/07/2015

init.rc là một phần của initramfs, nó không được bao gồm trong boot.img, bạn có thể sử dụng một công cụ như unmkbootimg để giải nén nó, chỉnh sửa nó sau đó xây dựng lại bằng mkbootimg, hai công cụ có sẵn trong dự án cm đang sử dụng Tôi sẽ biên dịch chúng cho bạn: D
lord-ralf-adolf 18/07/2015

Câu trả lời:


5

Có một phương pháp đơn giản để thêm hỗ trợ init.d cho bất kỳ Android gốc nào cho các phiên bản 4.0 trở lên, google đã tạo một tập lệnh chạy khi khởi động như siêu người dùng, tập lệnh install-recovery.shđược sử dụng để phản hồi phục hồi kho mỗi khi khởi động, họ nghĩ rằng đó là một cách tốt bảo mật để ngăn chặn phục hồi tùy chỉnh nhưng nó đã mở một lỗ hổng mới mà người dùng có thể khai thác để làm giả tính năng init.d. Phụ thuộc : để phương pháp này hoạt động, bạn cần có những điều sau đây

  1. Hộp bận rộn được cài đặt với run-partssymlinked đến đường dẫn của bạn như/system/xbin
  2. Rõ ràng là bạn sẽ cần một chiếc điện thoại đã root với /systemkhả năng gắn kết nhưrw
  3. phiên bản kernel không thành vấn đề.

Phương pháp I: (Cách dễ nhất!)

  1. Tải xuống APK này (miễn phí sử dụng, không phản chiếu, cảm ơn @Ryuinferno từ XDA).
  2. Cài đặt apk như mọi ứng dụng thông thường.
  3. Khởi chạy ứng dụng.
  4. bấm vào Kích hoạt! đó là tất cả các bạn setinit.d hiện đã được hỗ trợ, bạn có thể nhấp vào nút kiểm tra hoặc khởi động lại điện thoại của mình để xem các tập lệnh init.d của bạn đã thoát chưa
  5. bạn có thể gỡ cài đặt ứng dụng, nó sẽ không ảnh hưởng đến hỗ trợ init.d

Cách II: (độ khó: trung bình)

  1. Tải xuống zip này giải nén nó và đặt init.sh vào sdcard của bạn (trong trường hợp này, nó sẽ /sdcardcó thể thay đổi từ thiết bị này sang thiết bị khác.

  2. bây giờ hãy mở một thiết bị đầu cuối hoặc sử dụng adb shelltừ máy tính và chạy tập lệnh.
    su
    cp /sdcard/init.sh /data/tmp/init.sh
    chmod 777 /data/tmp/init.sh
    /data/tmp/init.sh

tập lệnh sẽ chạy và yêu cầu bạn khởi động lại hai lần, đó là tập lệnh bạn đã chính thức hỗ trợ init.d: ​​D

Tham khảo: [MOD] [APK + SCRIPT + ZIP] Kích hoạt init.d cho mọi điện thoại không cần hạt nhân tùy chỉnh !!!


Vì tệp zip được lưu trữ tại XDA, nên phải có một hướng dẫn mà bạn đã theo dõi hoặc biết bằng cách nào đó. Bạn có thể đề cập đến các liên kết cho nó? Tôi cần tìm kiếm một cái gì đó khác trong đó. :)
Firelord

1
@Firelord có kịch bản được không phải của tôi, nó đã được sử dụng cho mục đích khác, tôi lấy nó từ đây những bài quan điểm đơn> forum.xda-developers.com/... , đầy đủ các hướng dẫn nó về xposed và mối quan hệ 6 >> forum.xda -developers.com/nexus-6/general/...
chúa tể-Ralf-Adolf

@Firelord tìm liên kết tham chiếu mới có trong câu trả lời :)
lord-ralf-adolf

Cảm ơn, có lẽ tôi sẽ cho bạn tiền thưởng trừ khi có thứ gì đó đơn giản hơn xuất hiện. Nhưng tôi thành thật nghĩ rằng việc thêm một tập lệnh shell để chạy khi khởi động sẽ giống như điều đơn giản nhất mà người ta có thể làm trên một cái gì đó như CM. Rõ ràng là không phải; nó phức tạp hơn việc mã hóa một ứng dụng boot_completed thực hiện những gì tôi muốn, vì vậy tôi sẽ chỉ làm điều đó thay vào đó.
RomanSt 18/07/2015

@romkyns cm cũ hỗ trợ init.d theo mặc định, nhưng vì nó đã trở thành một công ty nên cách của họ đã thay đổi, mặc dù vấn đề init.d là trên phiên bản kẹo mút mới với chính sách selinux nghiêm ngặt / boot_completed cũng là một cách để làm điều đó và như bạn cho biết nó sẽ đơn giản hơn
chúa tể-ralf-adolf

2

Chỉnh sửa: Tôi đã thấy hết bài đăng, Cách này, tôi sẽ cố gắng thêm mà không có ứng dụng ASAP (không phải ở nhà, xuất bản bằng điện thoại di động), nhưng bạn có thể sử dụng điều này, nếu bất cứ điều gì khác không hoạt động.

Bạn có thể thử sử dụng ứng dụng có tên là Tasker .

Nó có giá 3,29 đô la và yêu cầu quyền truy cập root nhưng nó có thể chạy các tập lệnh Shell. Ngoài ra, nó có phiên bản dùng thử để bạn có thể dùng thử trước khi mua.

Đầu tiên tạo Nhiệm vụ. Chuyển đến tab Nhiệm vụ, nhấn + ký, nhập tên nhiệm vụ. Bây giờ đi lại dấu + và gõ shellvào bộ lọc. Bạn sẽ tìm thấy tùy chọn Run Shell, chọn nó và cấu hình nó theo nhu cầu của bạn.

Sau đó, quay lại tab đầu tiên - Cấu hình, nhấn + dấu để tạo mới. Chọn Sự kiện dưới dạng, đi Hệ thống và chọn Khởi động thiết bị. Quay trở lại và bạn sẽ được yêu cầu chọn nhiệm vụ. Bây giờ chọn nhiệm vụ được tạo ra thịnh hành và bạn đã sẵn sàng để đi!


1

Điều này đòi hỏi bạn phải flash một zip nhưng sau đó bạn có thể đặt tập lệnh của mình vào / system / etc / startup và sau đó chúng sẽ tự động khởi động với điện thoại.

http://forum.xda-developers.com/showthread.php?t=2664645

Cũng từ nhận xét của tôi dưới câu hỏi. Tôi đã cố gắng tìm kiếm trong lịch sử của mình nhưng tôi không thể tìm thấy liên kết nơi mọi người cho rằng CM có cách chạy tập lệnh riêng khi khởi động.

Biên tập. Sau khi đào thêm, nó không phải là CM, mỗi lần nói, đó là điều riêng của nó đối với các tập lệnh. Đó là hạt nhân. Không phải tất cả các nhân đều hỗ trợ init.d cho android. Nếu bạn đăng thiết bị bạn đang sử dụng. Tôi có thể tìm kiếm một kernel hỗ trợ các script tùy chỉnh khi khởi động cho ya.


0

Tôi cũng gặp vấn đề tương tự khi thực hiện tập tin tập lệnh trong thiết bị đầu cuối trong CM12.1. Giải pháp là bằng cách sao chép tập lệnh vào /datathư mục và thực thi nó. Vì vậy, tôi nghĩ rằng, CM 12 chỉ cho phép thực thi tập lệnh từ vị trí nhất định.


0

Cách đơn giản (làm việc):

  1. Chuẩn bị các lệnh khởi động bài đăng của bạn trong một tập lệnh, nói / system / xbin / post-boot (set exec perm)

  2. Thêm đường dẫn tập lệnh tùy chỉnh ở trên vào cuối /system/etc/init.qcom.post_boot.sh

Ví dụ:

echo / system / xbin / post-boot >> /system/etc/init.qcom.post_boot.sh

Làm xong!

(Nếu bạn không thể tìm thấy qcom post_boot (thiết bị Qualcomm), hãy tìm bất kỳ tập lệnh post_boot nào)


-1

Các bước sau để chạy tập lệnh khi khởi động. (Yêu cầu quảng cáo)

  1. gốc adb
  2. quảng cáo
  3. adb kéo /init.rc
  4. chỉnh sửa init.rc thêm dòng để thực thi tập lệnh như sh test.sh
  5. adb đẩy init.rc /
  6. vỏ adb
  7. chmod 755 init.rc
  8. khởi động lại adb

nó làm việc cho tôi tôi hy vọng điều này sẽ giúp bạn


1
phương pháp này hoàn toàn không hoạt động. Nội dung của các rootfs ban đầu như init.rc là một phần của ramdisk được khôi phục từ thiết bị của bạn flash mỗi khi khởi động. Bạn cần sửa đổi ramdisk trực tiếp trong phân vùng thích hợp của bộ nhớ flash trên thiết bị của bạn
chia cho 0

Hơn bạn có thể thêm vào /system/etc/init.qcom.wifi.sh
DreamCoder

1
phương pháp này sẽ không hoạt động, init.d không thể được đẩy! nó là một phần của initramfs, họ cần phải được chỉnh sửa trên boot.img hơn lóe lên một lần nữa, và cho init.qcom.wifi.sh nó của thiết bị cụ thể mà bạn không thể thực hiện một quy luật chung từ nó
chúa tể-Ralf-Adolf
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.