情况是从bootloader起kernel的时候挂掉了,所以adb不能起,boot和lk的log通过串口打印能用cutecom接收,但kernel里面的Log没有打印能不能咨询一下,怎么打开kernel的printk并用串口输出啊~
环境是msm8909,android8.1

printk打印用串口输出相关问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 你知我知皆知 2024-08-10 13:37关注
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
要使用串口从Android系统打印出kernel的日志信息,你需要在你的应用程序中添加一个日志打印功能,并且确保你的应用程序可以正确地连接到串口。以下是一个简单的示例,展示了如何实现这一目标:
首先,你需要在你的应用的
build.gradle
文件中添加必要的依赖。dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'org.apache.log4j:log4j-core:2.13.1' implementation 'org.apache.log4j:joran:2.13.1' }
然后,在你的应用程序的主activity或服务中,你可以创建一个新的线程来处理串口通信。这里我们使用
ThreadedLogcatReceiver
来监听来自串口的数据。import android.app.Service; import android.content.Intent; import android.os.IBinder; public class ThreadedLogcatReceiver extends Service { private LogcatOutputHandler handler = new LogcatOutputHandler(); private final String TAG = "ThreadedLogcatReceiver"; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); handler.start(this); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // Do nothing here. return START_STICKY; } } class LogcatOutputHandler implements Runnable { private static final String TAG = "ThreadedLogcatHandler"; private static final String LOGCAT_STREAM_NAME = "/dev/log"; private boolean stopRequested = false; private final Handler mHandler = new Handler(); public void start(Service service) { File logFile = new File("/proc/self/fd/6"); if (!logFile.exists()) { logFile.createNewFile(); } try (BufferedReader reader = new BufferedReader(new FileReader(logFile))) { while (!stopRequested && reader.ready()) { String line = reader.readLine(); if (line != null) { handleLine(line); } } } catch (IOException e) { e.printStackTrace(); } } private void handleLine(String line) { // Handle the line as needed in your application code. System.out.println("Received log message from kernel: " + line); } public void stop() { stopRequested = true; mHandler.removeCallbacksAndMessages(null); } }
在这个示例中,我们创建了一个新的线程来处理串口数据。当线程接收到串口数据时,它会调用
handleLine()
方法来处理这些数据。这个方法会在你的应用程序代码中被调用,用来处理你想要处理的任何日志信息。注意:这个示例仅适用于MSM8909设备。如果你的设备型号不同,请相应调整代码以适应你的设备。
解决 无用评论 打赏 举报