armsom产品Debian系统开发

embedded/2024/12/24 4:08:05/

第一章 构建 Debian Linux 系统

我们需要按【armsom产品编译&烧录Linux固件】全自动编译一次,默认是编译 Buildroot 系统,也会编
译 uboot 和内核,buildroot 某些软件包依赖内核,所以我们必须编译内核再编译 Buildroot。同
理 Debian 也需要从 Buildroot 编译后的产物,拷贝相关软件到 Debian 中,一般是一些驱动模块。
所以它们的编译关系是不可分开的。

1.1 Debian 安装 qemu

构建Debian系统需要依赖你电脑本地的环境,有些依赖包需要下载

在 SDK 顶层目录,进入 debian 路径下

cd debian/

在这里插入图片描述

执行下面的指令安装 qemu 及需要的一些包

sudo apt-get install binfmt-support qemu-user-static live-build
sudo dpkg -i ubuntu-build-service/packages/*
sudo apt-get install -f

在这里插入图片描述

1.2 构建 Debian 系统

执行下面指令开始构建 Debian 系统。注意,如果你没有先编译 buildroot 和内核,虽然不会
报错,完整的系统会从 buildroot 和内核中拷贝一些驱动或者文件到 Debian 系统中,拷贝的文
件是 Wifi 驱动和蓝牙驱动。(注意构建的时候 Ubuntu 必须能上网,因为 Debian 会从网上下载
构建所需要的资源!)

## IntroductionA set of shell scripts that will build GNU/Linux distribution rootfs image
for rockchip platform.## Available Distro* Debian 11 (Bullseye-X11 and Wayland)~~```
sudo apt-get install binfmt-support qemu-user-static
sudo dpkg -i ubuntu-build-service/packages/*
sudo apt-get install -f
```## Usage for 32bit Debian 11 (Bullseye-32)### Building debian system from linaroBuilding a base debian system by ubuntu-build-service from linaro.```RELEASE=bullseye TARGET=base ARCH=armhf ./mk-base-debian.sh
```Building a desktop debian system by ubuntu-build-service from linaro.```RELEASE=bullseye TARGET=desktop ARCH=armhf ./mk-base-debian.sh
```### Building overlay with rockchip audio/video hardware acceleratedBuilding with overlay with rockchip debian rootfs:```RELEASE=bullseye ARCH=armhf ./mk-rootfs.sh
```Building with overlay with rockchip debug debian rootfs:```VERSION=debug ARCH=armhf ./mk-rootfs-bullseye.sh
```### Creating roofs imageCreating the ext4 image(linaro-rootfs.img):```./mk-image.sh
```---## Usage for 64bit Debian 11 (Bullseye-64)Building a base debian system by ubuntu-build-service from linaro.```RELEASE=bullseye TARGET=desktop ARCH=arm64 ./mk-base-debian.sh
```Building the rk-debian rootfs:```RELEASE=bullseye ARCH=arm64 ./mk-rootfs.sh
```Building the rk-debain rootfs with debug:```VERSION=debug ARCH=arm64 ./mk-rootfs-bullseye.sh
```Creating the ext4 image(linaro-rootfs.img):```./mk-image.sh
```
---## Cross Compile for ARM Debian[Docker + Multiarch](http://opensource.rock-chips.com/wiki_Cross_Compile#Docker)## Package Code BasePlease apply [those patches](https://github.com/rockchip-linux/rk-rootfs-build/tree/master/packages-patches) to release code base before rebuilding!## License informationPlease see [debian license](https://www.debian.org/legal/licenses/)## FAQ- noexec or nodev issue
noexec or nodev issue /usr/share/debootstrap/functions: line 1450:
../rootfs/ubuntu-build-service/bullseye-desktop-arm64/chroot/test-dev-null:
Permission denied E: Cannot install into target
...
mounted with noexec or nodevSolution: mount -o remount,exec,dev xxx (xxx is the mount place), then rebuild it.
  • mk-base-debian.sh
    在Debian官网下载基础包,有些系统组件不需要的话可以在这里修改定制

  • mk-rootfs-bullseye.sh

    二次定制Debian系统,主要是一些已经打包好了的安装包,在这里你也可以加载你需要的应用软件

  • mk-image.sh

    打包Debian系统为img文件

构建过程中,首先会下载 Debian 系统,下载完 Debian 系统后,开始解压 Debian 系统,
此时需要用户权限,请输入你的用户密码,提升为 sudo 权限再继续编译。(注意千万不要为了
省事直接以 root 用户直接构建!避免出现离奇的错误!

1.3 如何使用编译出来的 linaro-rootfs.img

上述编译在debian目录下生成linaro-rootfs.img,

1.3.1 分区烧录

可以参考分区烧录视频,在烧录工具中单独勾选“rootfs”位置

1.3.2 完整Debian系统

上面编译出来的只是文件系统,无法生成 update.img,如果你要生成 update.img,在SDK首目录执行下
面的操作。

export RK_ROOTFS_SYSTEM=debian 	# 构建系统类型为 debian
./build.sh 						# 执行./build.sh 会生成 update.img

构建的过程中会编译 Uboot、内核等,等等漫长的时间后,最后会将 Uboot、内核和文件系
统等打包生成 update.img。
生成的 update.img 在 SDK/rockdev 下。

第二章 Debian 系统开发

Debian 是一种完全自由开放并广泛用于各种设备的 Linux 操作系统。选择 Debian 原因如
下,Debian 是自由软件并且保持 100%自由。每个人都能自由使用、修改,以及发布。大家可
以基于 Rockchip 构建的 Debian 系统进行二次开发。
Debian 是一个基于 Linux 稳定且安全的操作系统,其使用范围包括笔记本计算机台式机和
服务器等。它的稳定性和可靠性就深受用户的喜爱。
Debian 还是许多其他发行版的种子和基础,例如 Ubuntu、Knoppix、PureOS 等,由世界各
种的数百名志愿者共同制作。
目前 Rockchip RK3588 已经适配并支持。

2.1 Debian 版本

输入下面的指令查看 Debian 版本,如下可以看到是 Debian11 版本。

cat /etc/issue

在这里插入图片描述

输入下面的指令查看 内核 版本

uname -a

在这里插入图片描述

2.2 如何更新源

所谓的源,就是源头,我们常见的源有阿里云源(mirrors.aliyun.com),中科大源
(mirrors.ustc.edu.cn),南京大学(mirror.nju.edu.cn)源,清华大学源(mirrors.tuna.tsinghua.edu.cn),
还有 Debian 官方源(deb.debian.org)等都提供了对 Debian 源的服务。在 Rockchip 中默认使用
的是中科大源(mirrors.ustc.edu.cn)。实际上 Rockchip 已经为我们由 Debian 官方源切换为中科
大源,只要是国内的源,下载速度都是较快的。我们可以无需再换源。如果我们还是想试试换
其他源,可以按以下的方法来更换其它源。
查看默认的源

cat /etc/apt/sources.list

在这里插入图片描述

修改为其他源,例如阿里云源,如下,替换完成保存。如需要替换成其它源,可以自行尝试。
编辑/etc/apt/sources.list 文件,替换成如下内容。

deb http://mirrors.aliyun.com/debian buster main contrib non-free
deb-src http://mirrors.aliyun.com/debian buster main contrib non-free
deb http://mirrors.aliyun.com/debian-security buster/updates main contrib non-free
deb-src http://mirrors.aliyun.com/debian-security buster/updates main contrib non-free
deb http://mirrors.aliyun.com/debian buster-updates main contrib non-free
deb-src http://mirrors.aliyun.com/debian buster-updates main contrib non-free

执行下面指令更新本地仓库,也就是重定向软件包列表。更新软件源,记得插网线!并且网线可以上网的!

apt-get upgrade
apt-get update

2.3 软件包管理

查看系统已经安装的软件

apt list --installed

查看可安装的软件,执行下面的指令查看可安装的软件,若软件已经安装会显示已安装。

apt list

使用 apt remove 来卸载软件。apt 会解决和安装模块的依赖问题,并会咨询软件仓库, 但不会

安装本地的 deb 文件, apt 是建立在 dpkg 之上的软件管理工具。所以我们一般用 apt 管理软件。

例如我们卸载 vim 软件。首先我们查看 vim 是否已经安装。可以执行下面指令。

apt list --installed | grep vim

在这里插入图片描述

上图可以看到 vim 已经安装,那么我们将它卸载。询问是否卸载时,我们输入“y”确认卸载

同样我们使用 apt 来安装软件,执行下面的指令安装 vim。

apt install vim

2.4 如何创建自启动程序

debian 系统很多时候都有开机自启动自己的程序,这里有两种方法

2.4.1 /etc/rc.local 方法

通过将自启动程序放到/etc/rc.local 里,开机就会自启动,也可以写到/etc/init.d 下面
的某个文件里。

这里以/etc/rc.local 文件为例。如下图,打印“1111111111111111111111”,以此观察系统启动时,是
否会自动执行。注意我们的程序不能写到 exit0 后面了!

在这里插入图片描述

保存后重启开发板,可以看到启动后系统执行了这句打印!

在这里插入图片描述

2.4.2 添加systemd方法

我们先创建一个要启动的脚本。这个脚本就是打印“22222……”在/root 目录下编辑auto_run_script.sh。

#!/bin/bash
echo “2222222222222222222222222222” > /dev/ttyFIQ0

赋予脚本可执行权限,执行下面的指令

chmod +x auto_run_script.sh
  • /lib/systemd/system 是系统范围的目录,这些文件通常是由发行版的维护者创建的。
  • /etc/systemd/system:这个目录也包含 systemd 服务单元文件,但是它是用于本地管理员(系
    统管理员)自定义的服务配置。不会被/lib/systemd/system 服务覆盖。

所以我们需要进入/etc/systemd/system 目录下,创建一个自启动服务 auto_run_script.service。

cd /etc/systemd/system
vi auto_run_script.service

在 auto_run_script.service 里添加以下内容。

[Unit]
Description=Run a Custom Script at Startup
After=network.target
[Service]
ExecStart=/root/auto_run_script.sh
[Install]
WantedBy=default.target

然后我们使用 systemctl daemon-reload 重新加载 systemd 守护进程配置,并使用 systemctl
enable 建立符号链接关系。

systemctl daemon-reload
systemctl enable auto_run_script.service
systemctl start auto_run_script.service #马上启动此服务

重启后,我们看看打印信息,查看这个服务是否已经启动

如需禁止自启动,输入 systemctl disable auto_run_script.service,这个就会取消链接,下
次开机时不会自启动。如需要完全移除,删除这个 auto_run_script.service 以及它的脚本。

2.5 Debian基础设置

x11vnc_365">2.5.1 安装x11vnc远程桌面

x11vnc是一个VNC服务器,安装后我们可以不依赖外部的显示设备,,通过网络远程登debia桌面。

x11vnc_369">2.5.1.1 安装x11vnc
sudo aptitude install -y x11vnc\# 一直选择y

设置VNC客户端登录密码,这里我设置为armsom

sudo x11vnc -storepasswd /etc/x11vnc.pwd

设置x11vnc在开机时自动启动,新建如下文件:

sudo vi /lib/systemd/system/x11vnc.service

内容如下:

[Unit]Description=Start x11vnc at startup.Requires=display-manager.serviceAfter=syslog.target network-online.targetWants=syslog.target network-online.target[Service]Type=simpleExecStart=/usr/bin/x11vnc -display :0 -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pwd -rfbport 5900 -shared -capslock -nomodtweakExecStop=/usr/bin/x11vnc -R stopRestart=on-failure[Install]WantedBy=multi-user.target
2.5.1.2 测试远程桌面

在Windows电脑上安装VNC Viewe,下载地址https://www.realvnc.com/en/connect/download/viewer/windows/

安装完成后启动VNC客户端软件, 在地址栏输入: IP地址:5900连接即可

2.5.2 禁止用户自动休眠

桌面上在电源显示管理那里设置永不熄灭

执行如下命令查看休眠模式的情况:

systemctl status sleep.target● sleep.target - SleepLoaded: loaded (/lib/systemd/system/sleep.target; static)Active: inactive (dead)​    Docs: man:systemd.special(7)

可以看出,sleep状态是loaded,也就是处于开启状态。接下来,执行如下命令关闭系统的自动休眠开关:

systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.targetCreated symlink /etc/systemd/system/sleep.target → /dev/null.Created symlink /etc/systemd/system/suspend.target → /dev/null.Created symlink /etc/systemd/system/hibernate.target → /dev/null.Created symlink /etc/systemd/system/hybrid-sleep.target → /dev/null.

再次执行如下命令,查看休眠设置:

systemctl status sleep.target○ sleep.targetLoaded: masked (Reason: Unit sleep.target is masked.)Active: inactive (dead)

可以看到sleep的状态已经变成了masked,也就是关闭了。

虽然吧,这个解决方案看上去挺合理的。但实际上,它也无效,后来电脑还是会每晚自动休眠。

尝试如下命令;

gsettings set org.gnome.desktop.screensaver lock-enabled falsegsettings set org.gnome.desktop.session idle-delay 0
2.5.3 debain系统设置

检查当前时区:

root@ArmSom-sige7:/userdata/work/cpolar# timedatectlLocal time: 三 2024-01-03 11:13:27 UTCUniversal time: 三 2024-01-03 11:13:27 UTCRTC time: 三 2024-01-03 11:13:28Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yesNTP service: n/aRTC in local TZ: no

设置时区 (比如上海)

timedatectl set-timezone Asia/Shanghai
root@ArmSom-sige7:/userdata/work/cpolar#
root@ArmSom-sige7:/userdata/work/cpolar#
root@ArmSom-sige7:/userdata/work/cpolar# timedatectlLocal time: 三 2024-01-03 19:13:40 CSTUniversal time: 三 2024-01-03 11:13:40 UTCRTC time: 三 2024-01-03 11:13:41Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yesNTP service: n/aRTC in local TZ: no
2.5.4 更改桌面壁纸
cat /home/armsom/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
2.5.5 设置中文语言与输入法
2.5.5.1 设置中文语言

输入以下命令:

dpkg-reconfigure locales

执行之后可以使用空格选择,Tab键跳转光标,这里用空格选中 zh_CN.UTF-8

添加环境变量到.bashrc,这个文件主要用于设置系统的locale

 echo "export LC_ALL=zh_CN.UTF-8" >> ~/.bashrcecho "export LANG=zh_CN.UTF-8" >> ~/.bashrcecho "export LANGUAGE=zh_CN.UTF-8" >> ~/.bashrcsource ~/.bashrc
2.5.5.2 安装中文输入法

Fcitx (Flexible Input Method Framework) :即小企鹅输入法,它的优点是,短小精悍、跟程序的兼容性比较好

输入如下命令安装fcitx

aptitude install -y fcitx
aptitude install -y im-config
aptitude install -y fcitx-ui-classic fcitx-ui-light
aptitude install -y fcitx-frontend-gtk2 fcitx-frontend-gtk3

搜狗输入法选择选择Google,终端输入以下:

apt install -y fcitx-googlepinyin

重启后,在桌面环境按Ctrl+Space即可切换中英文输入法, 右上角也出现了输入法图标,左击右上角的输入法图标


http://www.ppmy.cn/embedded/148242.html

相关文章

什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap

在刚刚过去的 FlutterInProduction 活动里,Flutter 官方除了介绍「历史进程」和「用户案例」之外,也着重提及了未来相关的 roadmap ,其中就有 3.27 里的 Swift Package Manager 、 Widget 实时预览 和 Dart 与 native 平台原生语言直接互操作…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证2)

根据参考文献8中的介绍,JWT Token主要分为3个部分:   1)标题(Header):主要记录令牌类型、签名算法(加密算法)类型,格式为Json字符串,然后使用Base64编码字符…

探索Linux中的Zombie僵死进程

文章目录 探索Linux中的Zombie僵死进程什么是Zombie僵死进程?僵死进程的产生原因如何识别僵死进程?如何清理僵死进程?僵死进程对系统的影响总结 探索Linux中的Zombie僵死进程 在Linux系统中,进程管理是一个非常重要的主题&#x…

Python发送带key的kafka消息

在Python中发送带有键(key)的Kafka消息,通常会使用confluent-kafka或kafka-python这样的库。这里我将分别展示如何使用这两个库来实现这个功能。 ### 使用 confluent-kafka 首先,确保你已经安装了confluent-kafka库。如果没有安装…

陪诊小程序搭建,打造一站式陪诊服务

当下,陪诊市场正在持续火热发展,在全国医疗行业中,陪诊师成为了一个重要的就医方式。陪诊师的出现在快节奏生活下显得尤为重要,为不少没有时间陪老人去医院的家庭以及对医院不熟悉的提供了便利,满足了众多患者及其家属…

梳理你的思路(从OOP到架构设计)_介绍GoF设计模式

目录 GoF的由来 GoF的种类 GoF的由来 裁缝有样式、围棋有棋谱、烹饪有食谱、武功有招式、战争有兵法, ..... 皆是专家和高手的经验心得,通称为:模式(Pattern)。模式告诉您理想的方案像什么、有那些特性﹔ 同时也告诉您些规则,让…

python实现基于RPC协议的接口自动化测试

01 什么是RPC RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议。从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的。 RPC 是一种软件通信协议,一个程…

ubuntu22.04 nginx配置下载目录,亲测成功

安装nginx ubuntu最简单,apt安装即可 apt install nginx 配置文件 文件都在目录下 /etc/nginx/添加内容 修改/ etc/nginx/sites-available/default , 注意这里不是nginx.conf,直接修改nginx.conf不奏效 location /downloads { …