bouffalolab/bl808_linux

本文阐述了bouffalolab/bl808_linux平台,专为物联网、边缘计算和嵌入式系统设计,提供稳定内核、易用工具和全面支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bouffalolab/bl808_linux

概述

bouffalolab/bl808_linux 是一个基于 Bouffalo Lab BL808 SoC 的 Linux 开发平台。该平台提供了一套完整的开发工具、驱动程序和库文件,以便开发者可以轻松地在 BL808 上构建各种应用程序。

功能和用途

以下是 bouffalolab/bl808_linux 可以用于的一些功能和用途:

  • 物联网应用:BL808 SoC 内置了 Wi-Fi 和蓝牙功能,使得 bouffalolab/bl808_linux 成为了开发物联网应用的理想选择。您可以利用该平台构建智能家居设备、工业自动化系统等。
  • 边缘计算:由于 BL808 SoC 配备了高性能的处理器和大量的内存,因此 bouffalolab/bl808_linux 也适合用于边缘计算场景。您可以在设备上直接进行数据处理和分析,从而减少网络延迟并保护数据隐私。
  • 嵌入式系统开发:如果您需要为嵌入式设备开发操作系统或应用程序,那么 bouffalolab/bl808_linux 将是一个不错的选择。该平台提供了丰富的开发工具和库文件,可以帮助您快速实现目标。

特点

以下是 bouffalolab/bl808_linux 的一些主要特点:

  • 稳定可靠的内核:该平台基于 Linux 5.10 内核,具有高度稳定性和可靠性。
  • 易于使用的开发环境:bouffalolab/bl808_linux 提供了一个易于使用的开发环境,包括编译器、调试器和其他开发工具。
  • 完整的驱动程序支持:该平台包含了大量完整的驱动程序,支持各种外设和传感器,如 I2C、SPI、UART 等。
  • 高效能的处理器:BL808 SoC 配备了四核心 Cortex-A35 处理器,可提供高效的计算性能。
  • 灵活的内存配置:BL808 SoC 支持多种内存配置选项,可以根据您的需求进行灵活调整。

使用指南

要开始使用 bouffalolab/bl808_linux,请按照以下步骤操作:

  1. 下载源代码库:

    git clone https://gitcode.com/bouffalolab/bl808_linux.git
    
  2. 进入源代码目录,并配置内核:

    cd bl808_linux
    make menuconfig
    
  3. 编译内核和模块:

    make -j$(nproc)
    
  4. 将编译好的内核映像烧录到开发板中:

    make flash
    
  5. 启动开发板并登录:

    minicom -D /dev/ttyUSB0 -b 115200
    

通过以上步骤,您就可以开始在 bouffalolab/bl808_linux 平台上开发应用程序了。如果您遇到任何问题,可以访问项目的 GitHub 页面查找相关文档和支持信息。

int dsi_panel_set_backlight(struct dsi_panel panel, u32 bl_lvl) { int rc = 0; struct dsi_backlight_config bl = &panel->bl_config; if (panel->host_config.ext_bridge_mode) return 0; DSI_DEBUG("backlight type:%d lvl:%d\n", bl->type, bl_lvl); switch (bl->type) { case DSI_BACKLIGHT_WLED: rc = backlight_device_set_brightness(bl->raw_bd, bl_lvl); break; case DSI_BACKLIGHT_DCS: rc = dsi_panel_update_backlight(panel, bl_lvl); break; case DSI_BACKLIGHT_EXTERNAL: rc = lcd_bl_set_led_brightness(bl_lvl); //pr_err("dsi set bias brightness: %d\n", bl_lvl); rc = lcd_bias_set_led_brightness(bl_lvl); //pr_err("dsi set brightness: %d\n", bl_lvl); break; case DSI_BACKLIGHT_PWM: rc = dsi_panel_update_pwm_backlight(panel, bl_lvl); break; default: DSI_ERR("Backlight type(%d) not supported\n", bl->type); rc = -ENOTSUPP; } return rc; } int lcd_bl_set_led_brightness(int value)//for set bringhtness { dev_warn(&lcd_bl_i2c_client->dev, "lcm 8866 bl = %d\n", value); if (value < 0) { dev_warn(&lcd_bl_i2c_client->dev, "value=%d\n", value); return 0; } if (value > 0) { lcd_bl_write_byte(KTZ8866_DISP_BB_LSB, value & 0x07);// lsb lcd_bl_write_byte(KTZ8866_DISP_BB_MSB, (value >> 3) & 0xFF);// msb lcd_bl_write_byte(KTZ8866_DISP_BL_ENABLE, 0x4F); / BL enabled and Current sink 1/2/3/4 enabled;/ } else { lcd_bl_write_byte(KTZ8866_DISP_BB_LSB, 0x00);// lsb lcd_bl_write_byte(KTZ8866_DISP_BB_MSB, 0x00);// msb lcd_bl_write_byte(KTZ8866_DISP_BL_ENABLE, 0x00); /* BL enabled and Current sink 1/2/3/4 disabled;/ } return 0; } int lcd_bias_set_led_brightness(int value)//for set bringhtness { dev_warn(&lcd_bl_bias_i2c_client->dev, "lcm 8866 bl = %d\n", value); if (value < 0) { dev_warn(&lcd_bl_bias_i2c_client->dev, "invalid value=%d\n", value); return 0; } if (value > 0) { lcd_bl_bias_write_byte(KTZ8866_DISP_BB_LSB, value & 0x07);// lsb lcd_bl_bias_write_byte(KTZ8866_DISP_BB_MSB, (value >> 3) & 0xFF);// msb lcd_bl_bias_write_byte(KTZ8866_DISP_BL_ENABLE, 0x4F); / BL enabled and Current sink 1/2/3/4 enabled;/ } else { lcd_bl_bias_write_byte(KTZ8866_DISP_BB_LSB, 0x00);// lsb lcd_bl_bias_write_byte(KTZ8866_DISP_BB_MSB, 0x00);// msb lcd_bl_bias_write_byte(KTZ8866_DISP_BL_ENABLE, 0x00); / BL enabled and Current sink 1/2/3/4 disabled;*/ } return 0; } dsi_panel_set_backlight、lcd_bl_set_led_brightness和lcd_bias_set_led_brightness源码如上,帮忙用工作队列的方式,同时实现在case DSI_BACKLIGHT_EXTERNAL:下并发执行lcd_bl_set_led_brightness和lcd_bias_set_led_brightness两个函数
06-07
好的,我可以为您提供一个使用工作队列来实现并发执行`lcd_bl_set_led_brightness`和`lcd_bias_set_led_brightness`的示例代码。具体实现方法如下: 1. 定义一个工作结构体`struct work_struct`,并在其中传递参数。 ``` struct backlight_work { struct work_struct work; struct i2c_client *lcd_bl_i2c_client; struct i2c_client *lcd_bl_bias_i2c_client; int value; }; ``` 2. 定义工作队列。 ``` static struct workqueue_struct *bl_workqueue; ``` 3. 在`dsi_panel_set_backlight`函数中,将`lcd_bl_set_led_brightness`和`lcd_bias_set_led_brightness`函数的调用封装成一个工作任务,并将任务推入工作队列。 ``` case DSI_BACKLIGHT_EXTERNAL: { struct backlight_work *bl_work; bl_work = kzalloc(sizeof(*bl_work), GFP_KERNEL); if (!bl_work) return -ENOMEM; INIT_WORK(&bl_work->work, backlight_worker); bl_work->lcd_bl_i2c_client = lcd_bl_i2c_client; bl_work->lcd_bl_bias_i2c_client = lcd_bl_bias_i2c_client; bl_work->value = bl_lvl; queue_work(bl_workqueue, &bl_work->work); break; } ``` 4. 在`backlight_worker`函数中,实现`lcd_bl_set_led_brightness`和`lcd_bias_set_led_brightness`函数的并发执行。 ``` static void backlight_worker(struct work_struct *work) { struct backlight_work *bl_work = container_of(work, struct backlight_work, work); int value = bl_work->value; if (value < 0) { dev_warn(&bl_work->lcd_bl_i2c_client->dev, "invalid value=%d\n", value); } else if (value > 0) { lcd_bl_write_byte(KTZ8866_DISP_BB_LSB, value & 0x07); lcd_bl_write_byte(KTZ8866_DISP_BB_MSB, (value >> 3) & 0xFF); lcd_bl_write_byte(KTZ8866_DISP_BL_ENABLE, 0x4F); lcd_bl_bias_write_byte(KTZ8866_DISP_BB_LSB, value & 0x07); lcd_bl_bias_write_byte(KTZ8866_DISP_BB_MSB, (value >> 3) & 0xFF); lcd_bl_bias_write_byte(KTZ8866_DISP_BL_ENABLE, 0x4F); } else { lcd_bl_write_byte(KTZ8866_DISP_BB_LSB, 0x00); lcd_bl_write_byte(KTZ8866_DISP_BB_MSB, 0x00); lcd_bl_write_byte(KTZ8866_DISP_BL_ENABLE, 0x00); lcd_bl_bias_write_byte(KTZ8866_DISP_BB_LSB, 0x00); lcd_bl_bias_write_byte(KTZ8866_DISP_BB_MSB, 0x00); lcd_bl_bias_write_byte(KTZ8866_DISP_BL_ENABLE, 0x00); } kfree(bl_work); } ``` 这样,当`dsi_panel_set_backlight`函数中调用`lcd_bl_set_led_brightness`和`lcd_bias_set_led_brightness`时,会将其封装成一个工作任务并推入工作队列中,`backlight_worker`函数实现这两个函数的并发执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司莹嫣Maude

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值