实现自己的HAL-13 控制led(控制led 的app),从app 到 hal 到底层内核kernel层的驱动 的实现

Posted 杨斌并

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现自己的HAL-13 控制led(控制led 的app),从app 到 hal 到底层内核kernel层的驱动 的实现相关的知识,希望对你有一定的参考价值。

控制led 的app

  • MainActivity.java 代码
package com.example.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.app.HelloWorldServiceManger;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

    private boolean isInit;
    public static final String TAG = "hello_world_activity";
    private HelloWorldServiceManger service;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        service = (HelloWorldServiceManger) getSystemService(getString(R.string.server_name));
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                isInit = service.init();
                if (isInit) {
                    Log.d(TAG, "onClick: init成功");
                } else {
                    Log.d(TAG, "onClick: init失败");
                }
            }
        });
        findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                boolean close = service.ledClose();
                if (close) {
                    Log.d(TAG, "onClick: close成功");
                } else {
                    Log.d(TAG, "onClick: close失败");
                }
            }
        });

        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean open = false;
                open = service.ledOpen();
                if (open) {
                    Log.d(TAG, "onClick: open成功");
                } else {
                    Log.d(TAG, "onClick: open失败");
                }
            }
        });


        findViewById(R.id.btn3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean  openDevice = false;
                openDevice = service.openLedDevice();
                if (openDevice) {
                    Log.d(TAG, "onClick: openLedDevice成功");
                } else {
                    Log.d(TAG, "onClick: openLedDevice失败");
                }
            }
        });

        findViewById(R.id.btn4).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean  closeDevice = false;
                closeDevice = service.closeLedDevice();
                if (closeDevice) {
                    Log.d(TAG, "onClick: closeLedDevice成功");
                } else {
                    Log.d(TAG, "onClick: closeLedDevice失败");
                }
            }
        });


    }
}
  • strings.xml
<resources>
    <string name="app_name">My Application</string>
    <string name="action_settings">Settings</string>
    <!-- Strings used for fragments for navigation -->
    <string name="first_fragment_label">First Fragment</string>
    <string name="second_fragment_label">Second Fragment</string>
    <string name="next">Next</string>
    <string name="previous">Previous</string>

    <string name="hello_first_fragment">Hello first fragment</string>
    <string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>
    <string name="close">关闭led</string>
    <string name="server_name">helloworldservice</string>
    <string name="init">初始化</string>
    <string name="open">打开led</string>
    <string name="open_led_device">打开led设备</string>
    <string name="close_led_device">关闭led设备</string>
</resources>
  • 编译 生成apk

mmm packages/apps/HelloWorld/

  • 打包system.img 镜像

make snod


显示my Application app 说明成功

具体操作请看 系统编译自己的app

注意

  • 操作时需要给节点, 用户的访问读写权限

chmod 0666 /dev/hello_led

  • 需要关闭selinux 否者不可以获取到系统服务

getenforce


说明selinux 开启状态,获取不到系统helloworld服务
  • 关闭selinux
## 打开selinux 
setenforce 1
## 关闭selinux
setenforce 0

setenforce 0
getenforce


说明selinux 关闭状态,可以获取到系统helloworld服务
[app 源码](https://download.csdn.net/download/yangbinbingA/19897531)

以上是关于实现自己的HAL-13 控制led(控制led 的app),从app 到 hal 到底层内核kernel层的驱动 的实现的主要内容,如果未能解决你的问题,请参考以下文章

实现自己的HAL-9 控制led(驱动),从app 到 hal 到底层内核kernel层的驱动 的实现

实现自己的HAL-9 控制led(驱动),从app 到 hal 到底层内核kernel层的驱动 的实现

实现自己的HAL-14 控制led(内核设备节点的访问权限的动态配置),从app 到 hal 到底层内核kernel层的驱动 的实现

实现自己的HAL-14 控制led(内核设备节点的访问权限的动态配置),从app 到 hal 到底层内核kernel层的驱动 的实现

实现自己的HAL-12 控制led(自定义的系统service的实现),从app 到 hal 到底层内核kernel层的驱动 的实现

实现自己的HAL-12 控制led(自定义的系统service的实现),从app 到 hal 到底层内核kernel层的驱动 的实现