
Linux
文章平均质量分 66
慕诗客
这个作者很懒,什么都没留下…
展开
-
嵌入式Linux设备通过U盘实现固件升级
先说下升级思路,一般情况下只要更新可执行程序app即可,但有时候改动较大,需要引入新的第三方库,lib文件夹也需要更新,所以最好是将应用程序和库文件一道更新。检测到符合条件的升级包,首先弹框提示用户是否升级,如果用户点击了否,则不会升级,也不会再次弹框提示。如果用户点击了是,则进入下一步开始执行升级,首先判断目标目录/home/usr/appdeb是否存在,如果已经存在则清空内容,避免旧程序对新程序的影响,如果不存在则创建该目录。先说下我的设备,aarch64的SOC,跑的Ubuntu系统,支持QT5。原创 2025-04-14 18:16:37 · 328 阅读 · 0 评论 -
交叉编译工具链制作(RK3588用)
进crosstool-ng-1.26.0目录下,把crosstool-ng-1.26.0/samples/aarch64-rpi3-linux-gnu/crosstool.config拷过来,并改名为.config,我们基于这个来进行调整。通过 ct-ng list-samples查询一下,找一个跟我们的目标接近的,就选用aarch64-rpi3-linux-gnu吧。所以需要自行下载组件包,放到cross-ng/src目录下,下边是全放好的状态,也可以下载其中比较大的包,其余的任由它自动下载。原创 2024-11-12 20:34:23 · 958 阅读 · 0 评论 -
Ubuntu实现双击图标运行自己的应用软件
然后sudo cp hello.desktop /home/yml/Desktop,可以看到桌面多了个文件,查看属性并Allow Launching,带图标了,双击后即可运行hello程序。我们知道Ubuntu是有一些自带的程序的,它们都带有好看的图标,并且在桌面上点击一下即可运行,接下来我们就往这个方向去实现。这时候我们要执行hello.sh,依然是在终端输入./hello.sh,直接点击是无法运行的。我们设置hello.sh的属性,允许其按program方式执行。原创 2024-11-08 13:21:03 · 869 阅读 · 0 评论 -
RK3588的QT交叉编译环境搭建
先说一下,使用的Ubuntu20.04.5版本,qt源码用的5.14.2版本,交叉编译器使用RK3588 SDK中的,在我这边的路径为/home/yml/Documents/firefly/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin。首先我们配置一下环境变量,将交叉编译器的路径写入PATH,步骤如下所示。验证方式如下,不用带绝对路径就可以查到交叉编译器版本信息即为OK。原创 2024-11-01 13:21:16 · 2532 阅读 · 0 评论 -
Ubuntu上实现U盘自动挂载
其中fstab的方式需要提前获知U盘的UUID参数,不太方便,因此下边只使用udev方式。然后根据上述规则,我们进入/usr/local/bin,分别创建两个脚本usb-mount.sh和usb-umount.sh,内容如下。当然,程序本质上也是利用udev,需要安装libudev库。首先进入/etc/udev/rules.d/,新建一个规则如99-usb-mount.rules,添加以下内容。通过sudo mount /dev/sda1 /mnt/usb也可以实现挂载,可通过df -h查看确认。原创 2024-08-01 18:51:56 · 1930 阅读 · 0 评论 -
使用tftpd更新开发板内核
到这里文件已经下载完毕放在缓存里了,下一步就是写入存储介质里了,根据你的存储介质不同,可能会有不同的操作,我这里用的是emmc。接下来是开发板端的操作,上电后按CTRL+C打断启动,进入uboot,可以使用uboot指令,现在的uboot功能已经非常强大了,本次使用的uboot 2017.09支持tftp。我这里内存是8G,内核镜像256M,所以足够。文件夹路径放置你想要用于传输的文件,可以有多个文件,点击show dir可以看到里面的文件,我这里单独建立一个文件夹,只放了一个内核镜像。原创 2024-06-04 18:35:57 · 705 阅读 · 0 评论 -
Linux内核单独编译
现在的芯片功能越来越强大,功能也更加的丰富,为了推广自己的产品,一般芯片厂商都会提供一个包含Uboot,Kernel,Rootfs,以及芯片模块功能的SDK。但是,我们知道Linux内核中的配置项是特别多的,一项项去配置几乎是不可能的,不仅是因为参数功能不了解,而且也浪费时间。在配置好编译参数后就可以进行编译了,输入make后等待编译完成,会在对应arch的boot文件夹下生成镜像文件,输入make modules_install可以进行内核模块的安装。首先是内核源码的下载。原创 2024-02-07 22:19:08 · 788 阅读 · 2 评论 -
海思平台环境搭建并测试AI例程
先粘链接,本次测试所用的例程接下来记录环境搭建步骤。原创 2024-05-29 15:11:41 · 844 阅读 · 0 评论 -
从开发板导出根文件系统并修改(Ubuntu)
同步开发板根文件系统,usrname为开发板Ubuntu的用户名,可以是root也可以是普通用户名,boardip为开发板IP,意思就是将开发板/下的文件同步到ubuntu_rootfs文件夹中。首先我们得明白开发板里的根文件系统实际上就是一个包含各种文件的文件夹,我们也知道linux下的根目录是“/”,所以实际上就是将“/”下的所有文件导出即可。根文件系统导出有很多种方式,可以使用U盘本地导出,也可以使用网络远程导出,当然是网络更加的方便,这里就只描述网络导出的方式了。原创 2024-05-15 14:53:22 · 599 阅读 · 0 评论 -
VMware虚拟机没有网,无法设置网络为桥接状态
在网络设置里勾选的是桥接模式但无法联网,打开虚拟网络编辑器,发现没有VMnet0,自己新建一个也不行,提示没有未桥接的主机网络适配器。今天需要使用Ubuntu18但现有虚拟机是Ubuntu20,由于硬盘空间不够大,所以删除了原来的虚拟机并重新搭建Ubuntu18的环境,然后发现虚拟机没有网络,而我之前的虚拟机这一切都是正常的。接下来进任务管理器,把带黄色感叹号的VMnet1和VMnet8卸载掉,然后再进虚拟网络编辑器里还原默认设置,这时候就正常了,会多出VMnet0,虚拟机也可以上网了。原创 2024-05-14 14:18:00 · 714 阅读 · 0 评论 -
WSL介绍(Windows10内置的Linux子系统)
WSL的内核不是原生的,所以好像不能进行内核方面的开发,但是对于arm板的交叉编译应该是没什么问题的,可以按在虚拟机上操作的方式进行操作,不过暂时还没有测试,后续再说。在子linux里我们试了查看分区,可以看到跟常规的linux有些不一样,有一点比较好,可以通过/mnt/访问windows的不同盘,可以很方便的进行文件共享。安装好之后选择Debian图标打开,首次打开会提示输入用户名和密码,创建完毕就可以使用了,试了查询指令正常,也可以使用apt指令可以安装喜欢的各种软件。原创 2024-05-08 14:38:25 · 1296 阅读 · 0 评论 -
Linux编译内核模块生成.KO驱动示例
以上只是个示例,如果是实际的驱动,比如点亮一个灯这种,那么我们需要将它做成一个字符设备,要做的内容包括跟具体硬件相关的引脚配置,时钟配置,引脚电平操作等。现在的Linux内核十分庞大,驱动繁多,但是仍有一些是内核所不包含的,或者我们前期进行了内核裁剪,但后面又需要添加一些驱动,但是又不想重新烧录内核,这时候就可以使用内核模块功能,对内核驱动进行动态的调整。这个时候其实还有问题,会提示找不到文件,因为我们的hello文件夹位置是自定义的,而头文件是使用的相对路径,所以找不到。,但该博客不够完善,特补充说明。原创 2024-05-06 11:25:38 · 1582 阅读 · 0 评论 -
基于Ubuntu-base构建根文件系统
执行./mount.sh -m ubuntu_rootfs/指令后我们会发现终端字体变白了,而且是以root身份执行的,这表明我们已经进入了Ubuntu-base的文件系统了,可以用cat /etc/issue查看下系统版本,会发现跟你本机使用的Ubuntu是有差别的。Ubuntu是一个非常常见的发行版系统,具有丰富的软件功能,可以方便的进行各类开发,系统的apt工具更是搭建各种开发环境的神器。这时候发现报错了,因为此时的根文件系统没有网络功能,需要拷贝本机的resolv.conf文件到文件夹中。原创 2024-04-26 17:26:32 · 3191 阅读 · 0 评论 -
Ubuntu修改用户名及密码
有时候买了一块带Ubuntu的开发板,只在上面做应用开发,之后需要将整个系统重新打包成根文件系统用于生产批量烧录。但是,开发板出厂一般是有自己的用户名和密码的,我们需要定制修改成自己的用户名和密码。网上有很多种修改方法,但有时候修改完后会导致无法登录,所以做个总结。以上操作如果仍然有问题,推荐一个更简单的方式。以下是实测好用的方法,请按步骤操作。原创 2024-02-06 13:27:53 · 2520 阅读 · 0 评论 -
Linux设备树实现方式
一般的,.dtsi常用于描述SOC内部外设信息,由于这部分是固定的,一般会被具体的板级dts所引用,而在板级dts文件中,则会描述一些具体板级的外设信息。在设备树中,可以使用节点标签来便捷的访问节点,通过节点标签可以便捷的在新文件中完成节点的数据追加。在ARM架构下的设备树出现之前,Linux内核源码中使用了大量的文件来记录这些板级信息,而这些信息会被编译进Linux内核,导致内核“虚胖”。设备都是以节点形式挂在设备树上的,要获取这些设备属性,必须得获取到设备节点。下面来讲讲设备树的好处以及它的实现方式。原创 2024-02-05 22:04:52 · 563 阅读 · 0 评论 -
Linux驱动工作原理
首先列一张Linux下应用程序对驱动的调用图本次讨论内核是如何操作具体硬件的。从图中可知,内核是通过驱动程序中的open(),close()等函数去实现硬件操作的,单从这一点来看,似乎跟单片机通过库函数操作外设差不多。但是Linux内核不是为某一款芯片去设计的,它可以在许多芯片上运行,很明显,它不可能将每款芯片的具体操作函数都写进去,这样的话内核得爆炸。从软件设计层面上来说,分层是必不可少的,为此Linux有着自己的一套驱动框架,不同芯片只需要按它的驱动框架编写驱动就可以了。原创 2024-02-05 20:45:51 · 414 阅读 · 0 评论 -
RK3588搭配使用Eco Capture采集卡
编译新的内核烧录进板子,同时将源码拷到RK3588上,make ARCH=arm64 rockchip_linux_defconfig rk3588_linux.config firefly-linux.config,然后make.编译完毕安装make modules_install,结果空间不足,默认指向的/boot/lib分区只有134M.所以使用make modules_install INSTALL_MOD_PATH=/home/libmod。原创 2024-01-29 14:30:02 · 1014 阅读 · 0 评论 -
linux下通过nfs挂载共享文件夹
这样,在Ubuntu主机端编译生成的可执行文件拷贝到/home/user/nfs_share文件夹后,在开发板的/home/nfs_mount目录里就可以找到,便于测试。在最后一行添加 /home/user/nfs_share *(rw,sync,no_subtree_check,no_root_squash)然后重启服务sudo /etc/init.d/nfs-kernel-server restart。创建一个用于共享的文件夹mkdir -p /home/user/nfs_share。原创 2024-01-29 19:16:22 · 483 阅读 · 0 评论 -
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 16795
今天使用Ubuntu apt去下载时出现Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 16795异常,使用kill指令无效。原创 2024-02-04 16:37:18 · 2290 阅读 · 2 评论 -
Uboot使用tftp下载
在ubuntu服务器配置完毕后,执行uboot指令,结果出现了异常TFTP error: 'File not found' (1),其原因为/etc/xinetd.d/tftp配置文件不对,需要添加-c,以下为完整正确操作。然后配置/etc/default/tftpd-hpa,输入sudo vi /etc/default/tftpd-hpa。接下来配置/etc/xinetd.d/tftp,输入sudo vi /etc/xinetd.d/tftp。这时候在uboot中再次使用tftp指令就没问题了。原创 2024-02-05 11:03:17 · 736 阅读 · 0 评论