首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
Search
1
在IC617中进行xa+vcs数模混仿
81 阅读
2
科普:Memory Compiler生成的Register file和SRAM有何区别?
73 阅读
3
virtuoso和empyrean alps模拟仿真和混仿教程
73 阅读
4
后仿中$setup,$hold与$setuphold
44 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
35 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vscode
linux
systemverilog
vcs
STM32
PyQT
EDA
FPGA
gvim
cadence
Alist
xilinx
UVM
uos
macos
package
MCU
risc-v
bennyhe
累计撰写
378
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
搜索到
378
篇与
的结果
2025-12-31
在大学里想学一下 RISC-V 处理器设计,应该怎么入门?
https://www.zhihu.com/question/440881969/answer/1698001295推荐两个国内的开源RISC-V核:一、芯来的蜂鸟e200这是一个MCU级别的开源RISC-V处理器核,可运行一些实时操作系统。这也是国内最早的开源RISC-V核,由胡振波(芯来科技创始人)带领团队开发。可以买到相应的书《手把手教你设计CPU——RISC-V处理器篇》。https://github.com/SI-RISCV/e200_opensourcegithub.com/SI-RISCV/e200_opensource二、国科大的果壳(NutShell)这是中国科学院大学(国科大)第一期“一生一芯”计划五位本科生主导开发的一款开源RISC-V处理器核,功能比较完整,可以运行Linux/Debian。果壳有一些应用,华为的OpenEuler也成功移植到果壳处理器上。https://github.com/OSCPU/NutShellgithub.com/OSCPU/NutShell果壳配套的相关设计文档:https://github.com/OSCPU/NutShell-docgithub.com/OSCPU/NutShell-doc作者:包云岗链接:https://www.zhihu.com/question/440881969/answer/1698001295来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:机器小子myyerrol链接:https://www.zhihu.com/question/440881969/answer/1698484978来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。前言我是在大三下学期的时候(即2016年的夏天)第一次听到了RISC-V这个词,那会儿我舍友刚好参加了学院组织的《计算机体系结构》试点班,而他们的任务就是要基于RISC-V指令集去设计一款简单的软核CPU,当时我只知道它是由伯克利大学推出的开源RISC指令集,觉得跟我们普通班学习所要用到的MIPS指令集类似,所以就没有太放在心上。可是令人没有想到的是,经过短短几年的发展,RISC-V指令集已经得到了全世界众多互联网和半导体巨头的支持,而且有越来越多的研究机构和初创公司开始基于它来设计自己的专有处理器,我认为目前的RISC-V就像早期的Linux内核,虽然功能和性能还非常有限,但是借助开源协作的力量,我相信总有一天RISC-V也能在某些领域迎来一场足以改变旧有格局的革命。因此为了不被即将到来的新时代所抛弃,作为一名业余硬件爱好者,我觉得自己还是很有必要好好学习一下RISC-V指令集的,没准以后有机会还能为国产自主可控处理器的设计和研发贡献自己的一份力量!古人曾经说过:纸上得来终觉浅,绝知此事要躬行,既然自己决定要学习RISC-V,那就必须亲身实践才能搞明白,而对于这种处于计算机体系结构底层的项目来说,没有什么能够比自己从零实现一遍更好的方法了,于是抱着这种想法我开始在网上搜集资料,结果比较令人失望,虽说国外与RISC-V相关的开源项目有不少,但是其中很多都是用Chisel这种高级硬件构建语言来实现的,学习门槛非常高,再加上为了追求整体的性能,一些CPU的系统架构设计得非常复杂(如采用五级以上流水线、多核处理、乱序执行等),初学者想入门非常困难。所以经过深思熟虑后,我决定从零编写一款系统架构足够精简、代码足够清晰、封装足够优秀的开源处理器项目,希望它能像从众多微控制器中脱颖而出的Arduino一样,让更多的硬件爱好者可以快速上手体验,并基于此开发很多有意思的应用,未来在软硬件生态环境的互相促进下,也许会有更多的人喜欢上CPU开发并愿意花时间去钻研,如果真的能够做到如此,我也就心满意足了。内容任务进度如下图所示,根据木心开源处理器项目所涉及的技术要点,我将其第一版的开发任务总共划分为了5个阶段,分别为需求设计、硬件设计、软件设计、板级验证和板级应用,其中考虑到自己是第一次从零开始编写处理器,应该把更多的注意力放在代码的实现和调试上,所以板级应用这个阶段我将其设置成了选做,如果后期有时间的话,我还是希望自己能够将木心处理器封装到自己设计的开发板上的,好了废话不多说了,接下来简单介绍一下前4个阶段所必须要完成的任务内容。首先是需求设计阶段,这个阶段主要是根据相关专业书籍和RISC-V指令集手册,确定木心处理器的整体架构,并完成软件开发环境的配置;紧接着是硬件设计阶段,这一步需要基于需求设计阶段所确定的系统架构,完成处理器功能模块与数据通路等核心硬件代码的编写和测试工作;接下来是软件设计阶段,在这期间需要完成软件底层(汇编文件、启动文件、链接脚本等)配置以及RTOS系统移植,从而确保木心处理器最终能够分别在裸机和RTOS环境下运行C语言程序;最后是板级验证阶段,顾名思义就是将软硬件代码烧录到FPGA开发板上,然后在物理端验证处理器的功能和性能等指标是否满足项目要求。木心处理器任务进度图(该图不是最终版,后期可能会更新)整体架构指标参数基于为了能够让初学者们更好入门的核心目标,我将第一版木心处理器的内部开发代号命名为TC-L1(TreeCore Learn 1),即木心学习专用处理器第一版的英文简写,它是一款由处理器核、数据总线和外围设备所组成的SoC,无论是系统的核心与外围功能模块,还是指令执行所依托的数据通路在设计与实现阶段均追求极致的精简,只保留能够维持系统正常运行的最小环境,所以你可以把它看成是处理器领域的一个最小系统。注意:后文所有【处理器】特指的是SoC,而【处理器核】则指的是SoC中能够执行具体指令的硬件逻辑单元。木心TC-L1处理器的特性如下所示:处理器核支持最基础的RV32I指令集,且能通过RISC-V指令集兼容性测试;处理器核采用最经典的的五级流水线结构(即取指、译码、执行、访存和写回),且所有指令均是单发射顺序执行的,即系统架构设计满足Unix内核的K.I.S.S.准则;处理器核设计有标准的JTAG调试接口,可通过OpenOCD实现系统的在线调试与升级;处理器核设计有专用的数据总线接口,可通过数据总线与外围设备(目前设计有GPIO、SPI、UART等)进行单向或双向通信;处理器核能够在裸机和RTOS环境下运行C语言程序;处理器可通过参数进行配置,方便移植到各种FPGA平台(在逻辑资源允许的情况下)。功能模块如下图所示,TC-L1处理器的功能模块主要分为4大部分,分别为TC-L1处理器核、TCD调试模块、TCB数据总线以及TCC外部组件,其中处理器核毫无疑问是整个SoC里面最重要的一个模块,它主要负责处理经过软件编译生成的底层指令,并可通过总线接口与其他模块进行数据交互;调试模块则扮演的是辅助角色,用于在编写处理器的过程中提供快速定位系统Bug的能力;接下来的数据总线模块,其功能就好比是现实世界中的桥梁,可建立起处理器内部各模块之间的数据通路,便于实现数据的快速访问;而最后的外部组件模块则包含外部设备和存储器件共两个子模块,其中外部设备模块可实现处理器核与外部标准设备进行数据通信,而存储器件模块则主要用于存储维持处理器运行的各种指令和数据。木心处理器功能模块图(该图不是最终版,后期可能会更新)数据通路在介绍完TC-L1处理器的各种功能模块之后,接下来让我们简单了解一下其内部的数据通路具体是什么样子的。如下图所示,TC-L1处理器核的数据通路采用经典的五级流水线结构,整条流水线由4个流水线寄存器(图中用细长条矩形标识)加以划分开来,其中最左侧的区域为取指阶段,此时处理器会根据PC寄存器中的地址,从指令存储器中获取需要执行的指令,并将其加载到IF/ID流水线寄存器中,以便在下一个时钟边沿到来时能够将数据传递给下一阶段;取指之后自然是译码阶段,此时处理器会根据组合逻辑译码后的结果,初始化核心控制逻辑,并依据指令的具体内容,执行内部中断、读寄存器或符号扩展等操作。之后3个阶段依次分别为执行、访存和写回,其中在执行阶段,处理器会使用ALU对指令数据进行运算,并将最终运算得到的结果保存到流水线寄存器EX/MEM中以供后面使用;而对于访存阶段来说,此时处理器在控制信号的约束下,会对数据存储器进行读写操作,如果指令是读数据的话,则类似需要将获取到的数据保存到流水线寄存器MEM/WB中以供后面使用;流水线的最后是写回阶段,这一步其实执行逻辑很简单,就是将上一阶段读出的数据或在执行阶段得到的运算结果写回到译码阶段中的寄存器堆中,为之后指令的执行奠定数据基础。木心处理器数据通路图(该图不是最终版,后期可能会更新)资料搜集专业书籍《计算机组成与设计:硬件/软件接口(第五版)》下面这本书绝对称得上是计算机体系结构领域里最有名的著作之一,因为它是由RISC架构的奠基者帕特森教授和亨尼斯教授合作编写的(两位宗师级大佬荣获了2017年ACM图灵奖),书中详细介绍了计算机体系结构的相关基础知识,并以MIPS指令集为例给出了一款经典RISC处理器的设计方法,内容质量非常高。这里推荐给大家一方面是因为第一版木心处理器采用的就是这本书中所介绍的经典五级流水线架构,这样后期大家学习起来会比较容易,二是这本书的译者之一是大学本科给我们上过课且带过我毕设的老师,出于对母校的感情,就允许我任性地自荐一下吧《计算机组成与设计:硬件/软件接口(第五版)》《RISC-V手册》这本指南是由中科院计算所包云岗老师团队负责翻译的,原作为帕特森教授(RISC架构发明者)和沃特曼博士(SiFive创始人)合作编写的《The RISC-V Reader》,这本书给出了所有官方已定义的RISC-V指令集格式,并按照章节对RISC-V基础整数指令子集RVI、乘除法指令子集RVM、浮点指令子集RVF和RVD、原子操作指令子集RVA,以及其他可选的扩展子集进行了详细介绍,可以说是目前关于RISC-V指令集最权威且最全面的资料。在开始学习或动手实践前,强烈建议各位好好研究一下这本书,绝对受益匪浅。《RISC-V手册》开源项目tinyriscv项目目前国内与RISC-V相关的开源项目屈指可数,其中我觉得最适合小白入门学习的是下图中的这个tinyriscv项目,推荐理由主要是因为这款处理器不仅系统架构设计得非常简单,而且代码书写风格也非常规范,初学者只需要花很短的时间就能弄明白处理器执行指令的整个流程。除此之外,作者还编写了与本项目相配套的设计文档——《从零开始写RISC-V处理器》,里面详细地介绍了处理器的硬件实现、外部调试、软件测试等内容,文章总体质量非常高,后期木心项目也会在一定程度上借鉴tinyriscv项目的某些设计理念,当然无论最终本项目的完成情况如何,这里我都要先给tinyriscv项目的作者点一个大大的赞。tinyriscv项目主页总结从大学选择硬件作为自己本科的学习方向开始,我就一直坚信它是支撑整个信息时代最关键的组件,试想一下倘若没有硬件所搭建的基础环境,那面向用户的高级操作系统也将不复存在,而如果没有了操作系统作为硬件和软件间的桥梁,那可以毫不夸张的说,当下信息时代的所有产物(互联网、大数据、AI等)都不可能会出现。处理器作为硬件的中枢神经,其重要性自然不言而喻,如果把整个信息产业比喻成一棵树木的话,那我认为处理器就是这棵树的精神核心(简称木心,没错本项目的命名便是由此而来的),只有一棵树的木心足够稳定和强大,那它才能不断成长为根系错综复杂、枝叶繁盛茂密的参天大树,从而有力量抵抗外部各种恶劣环境而长久屹立不倒,处理器亦是如此。前段时间我在知乎上看到了包云岗老师所写的有关国科大“一生一芯”计划的故事,相较于本科生能够带着自己设计的芯片毕业,我觉得该计划更大的意义在于:它打破了传统芯片教学无法在物理层面实践的壁垒,让更多的学生看到了独自设计芯片的可能性,如果能有更多的人喜欢处理器设计并愿意投入到其中,那未来国内芯片设计人才短缺的问题将会得到不断改善,中国也就有机会逐渐摆脱被发达国家卡脖子的窘境,于是借着“一生一芯”计划带给自己的启示,我决定启动木心项目,希望除了CS专业的大学生之外,普通的爱好者们也能转变对芯片设计的态度,并愿意尝试去学习底层技术,假以时日,星星之火也许真的可以燎原。最后,感慨一下:在当前这个利益至上的时代,情怀是肯定敌不过生活的,但是人的生命只有一次,能够在有限的生命里去做一件有意义且难度大的事情,就算最后没有达到自己当初所设立的目标,我觉得这份经历本身也足以配得上成功二字!
2025年12月31日
2 阅读
0 评论
0 点赞
2025-12-30
gvim for verilog简易配置
目录前言一、gvim的主题和字体资源二、gvim编辑器基本配置三、gvim针对verilog配置总结前言分别介绍了gvim的主题和字体资源推荐,gvim编辑器基本配置和针对verilog的配置。以下为正文一、gvim的主题和字体资源1、主题(color scheme)资源 在gvim官网中,提供了较多的主题资源可供选择,主题资源,以lucius为例,在下载资源(*.vim)后,将其放入vim安装路径下color文件夹中,并在gvim的配置文件中加入: colorscheme lucius一键获取完整项目代码2、字体资源 个人比较喜欢Ubuntu Mono的字体,下载后得到*.ttf文件,双击后即可安装,然后在gvim的配置文件中加入: set guifont=Ubuntu\ Mono:h18一键获取完整项目代码二、gvim编辑器基本配置 这里做一些简单的配置,以后有更方便的再进行添加,如下: set smarttabset shiftwidth=2set tabstop=2set number一键获取完整项目代码gvim在windows系统中系统粘贴复制的快捷键为:shift+Insert(从剪贴板中粘贴)、ctrl+Insert(复制选中的文本到剪贴板)三、gvim针对verilog配置1、使用gvim建立verilog文件时,自动生成简单的常用工程代码autocmd BufNewFile *.v,*.sv,*.cpp,*.c,*.h exec ":call Setfilehead()" func Setfilehead() call append(0,'/***************************************') call append(1,'#') call append(2,'# Filename:'.expand("%")) call append(3,'#') call append(4,'# Developer:annotater') call append(5,'# Description:---') call append(6,'# CreatTime:'.strftime("%Y-%m-%d %H:%M:%S")) call append(7,'#') call append(8,'***************************************/') call append(9,'module '.expand("%:r")."(") call append(10,'') call append(11,');') call append(12,'') call append(13,'') call append(14,'endmodule') endfunc map <F11> :call Setfilehead()<CR>:10<CR>o一键获取完整项目代码2、在明德扬视频中学到的,可以使用gvim调用代码,不需要重复输入代码,就可以把精力更多的放在设计上,这里以一个时序逻辑为例,在gvim配置文件中输入如下代码::ab zuhe1 always@(*)beginend一键获取完整项目代码在gvim编辑中输入zuhe1,如下图所示回车后则可得到代码,如下图所示以此为例,可以添加自己常用的电路代码模块,以减少编写代码的时间。总结描述一些在verilog设计中gvim的基本设置,也是自己查看别人的博客后得到的经验,谢谢他们的分享。————————————————版权声明:本文为CSDN博主「Annotater」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/mingke_1/article/details/118399890
2025年12月30日
5 阅读
0 评论
0 点赞
2025-12-30
后仿中$setup,$hold与$setuphold
在sdf2.1版本中,只能用$setup,$hold和$recovery,$hold。在sdf3.0版本中,增加了$setuphold,$recrem,$removal。分开描述的$setup、$hold、$recovery、$removal不支持negative value。如果要标注负值只能用合起来的$setuphold和$recrem。某工艺的verilog仿真库 $hold(posedge T &&& (shcheckTDlh=== 1'b1), posedge D &&& (shcheckTDlh=== 1'b1),1.0); $hold(posedge T &&& (shcheckTDlh=== 1'b1), negedge D &&& (shcheckTDlh=== 1'b1),1.0); $setup(posedge D &&&(shcheckTDlh === 1'b1), posedge T &&& (shcheckTDlh=== 1'b1),1.0); $setup(negedge D &&&(shcheckTDlh === 1'b1), posedge T &&& (shcheckTDlh=== 1'b1),1.0); $recovery(posedge S,posedge T,1.0); $removal(posedge S,posedge T,1.0);对应3.0版本的SDFTIMINGCHECK (WIDTH (negedge S) (0.103::0.103)) (REMOVAL (posedge S) (posedge T)(0.140::0.140)) (RECOVERY (posedge S) (posedge T)(0.000::0.000)) (WIDTH (negedge T) (0.078::0.078)) (WIDTH (posedge T) (0.094::0.094)) (SETUP (posedge D) (COND shcheckTDlh===1'b1(posedge T)) (0.000::0.000)) (SETUP (negedge D) (COND shcheckTDlh===1'b1(posedge T)) (0.016::0.028)) (HOLD (posedge D) (COND shcheckTDlh===1'b1 (posedgeT)) (0.043::0.049)) (HOLD (negedge D) (COND shcheckTDlh===1'b1 (posedgeT)) (0.009::0.010)) )另一个工艺的verilog仿真库 $setuphold (posedge CP, posedge D, 0, 0,notifier,,, delayed_CP, delayed_D); $setuphold (posedge CP, negedge D, 0, 0,notifier,,, delayed_CP, delayed_D); $recovery (posedge SDN, posedge CP, 0,notifier); $hold (posedge CP, posedge SDN, 0,notifier);对应的2.1版本的SDF: (TIMINGCHECK (WIDTH (negedge SDN) (1.404::1.404)) (HOLD (posedge SDN) (posedge CP)(-0.198::-0.198)) (RECOVERY (posedge SDN) (posedge CP)(0.267::0.267)) (WIDTH (negedge CP) (0.425::0.425)) (WIDTH (posedge CP) (0.440::0.440)) (SETUP (posedge D) (posedge CP)(0.057::0.057)) (SETUP (negedge D) (posedge CP)(0.082::0.082)) (HOLD (posedge D) (posedge CP)(-0.048::-0.048)) (HOLD (negedge D) (posedge CP)(-0.013::-0.013)) )对比两个版本的SDF可以看出3.0的SDF用$removal代替了$hold。第一个verilog仿真库,采用了分开的$setup和$hold,$recovery和$removal。第二个库采用了合起来的$setuphold,但$recovery和$hold还是分开的。所以,第一个库不支持负值的标注;第二个库$setup和$hold支持负值,而$recovery和$hold不支持负值。在SDF版本选择上,第一个库只能用3.0,因为库里用到了$removal。第二个库只能用2.1,因为使用了$hold,如果用3.0的话,Incisive后仿时,会报错,说找不到$removal。结论工厂提供的verilog仿真库总是不那么规范。要么修改库(让工厂修改或自己修改),要么根据库产生符合条件的SDF,但也就不能反标注负值了。提示:pt产生SDF时加参数-version 2.1|3.0,用include来灵活控制,可产生不同需求的SDF。具体可查pt的write_sdf命令的参数。下面是一个例子:write_sdf -version 3.0 \-context verilog \ -include {SETUPHOLD RECREM} \ max.sdf 后仿时看反标注的成功率,如果反标成功率太低,要仔细检查。Incisive的反标率如下:SDF statistics: No. of Pathdelays =37802 Annotated = 100.00% -- No. ofTchecks = 25964 Annotated = 99.60% Total Annotated Percentage Path Delays 37802 37802 100.00 $hold 2306 2306 100.00 $width 12632 12632 100.00 $recovery 2306 2306 100.00 $setuphold 8720 8616 98.81然而VCS并没有这样的百分比报告。
2025年12月30日
44 阅读
0 评论
0 点赞
2025-12-30
NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记
. 前言 大家好,今天来聊聊听歌那点事儿,虽然现在日常听歌的时间越来越少,但是开车时相信大多数人都会来点音乐,大家是不是也都充了各种音乐会员呢?我自己平时就用淘宝88VIP附赠的网易云音乐黑胶会员,基本够用,只是没有周杰伦可听,作为三年的非资深韭菜特斯拉阿童木车主,自己拷贝歌曲文件到优盘播放不会显示歌词,车机不能安装第三方软件,APP只有网易云QQ和苹果,实在不想去充QQ音乐会员,想过搞Apple Music,界面清爽干净曲库也还比较大,可是试用了一下发现特斯拉车机版Apple Music也没有歌词显示,那咋整?偶然间,我的一位朋友(是的,又是那位朋友)给我推荐了Navidrome,看上去不错,来试试吧。 NAS端配置首先,Navidrome是一个开源的个人音乐服务器软件,官网: https://www.navidrome.org/github的地址:https://github.com/navidrome/navidrome/ 搭建好之后可以用网页或者app来访问你存放好的音乐文件,基本上常用的音乐格式都能很好的支持。 一般来说是通过docker(不少厂商都改称container了,但习惯上还是说docker)安装,现在docker访问有一定的技巧,我们先把镜像拉下来,再双击进行配置: 2.1威联通配置 自定义容器名字,自选访问端口:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 然后点击高级设置,找到存储这一项,点击右边两个垃圾桶把这两项删掉,默认是卷映射,我们用好理解的文件夹映射,点击右上添加卷的下箭头,选择“绑定装载主机路径”:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 添加两个主机路径,分别对应容器的/data和/music,第一个文件夹是navidrome的配置文件保存位置,随便选一个地方放就行,我是在docker的目录里面建了一个navidrome文件夹,第二个是自己音乐文件的保存位置。NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 配置好之后点击应用再点下一步并点击完成即可。 2.2群晖配置 群晖的配置类似,自定义容器名字,启用自动重启:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 设置一个你喜欢的访问端口,在存储空间设置下方点击添加文件夹:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 分别为/music和/data指定nas中的文件夹位置,图上只是随便选的示意,你们根据自己的情况选文件夹就行:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 再点击下一步,再点完成即可。 非常简单! NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记客户端使用Navidrome支持多种客户端访问,我主要用到的是网页和pc、安卓客户端 3.1 网页客户端 第一次访问先用网页浏览器,打开你的nas地址:刚刚设置的端口号,我用的默认端口号4533就是10.0.0.10:4533NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 自己设置一个用户名和密码点击下面按钮即可进入,进去之后音乐文件夹里已有的专辑封面就会显示出来了:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 初始界面是英文,点右上角头像图标可以设置界面主题,语言等NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 在车机上使用网页版时,建议设置成Auto主题,这样他会跟随车机的白天/夜间模式而变化为白色和黑色主题,不那么费眼睛。 然后在Lucky上设置好这个局域网网页ip的反代:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 就可以在开车时通过车机浏览器播放喜欢的但是网易云上没有的音乐啦,行驶时也可以听的:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记3.2 APP客户端(PC、安卓) 推荐这个国产的免费APP(有内购,58元终身):音流 官网和下载: https://music.aqzscn.cn/ 软件小巧精干,界面也很美观,比Navidrome网页端好看多了。 PC版界面:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 以防你装好之后找不到,PC版在开始菜单里面显示的名字是: Stream Music 为什么我会想到这个问题?因为我一开始也找了老半天。。 安卓版界面:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记音乐库信息整理和编辑装好Navidrome我就把冷备份硬盘上的几千首歌放到了主力NAS上配置好的文件夹里,刷新一看,哇,好多好久不听又特别熟悉的歌!满满的都是回忆啊,但是这些古董文件的歌曲信息、封面图、歌词基本都是残缺不全的,怎么办?这时我那位朋友又及时出现了,推荐了这款软件https://www.cnblogs.com/vinlxc/p/11347744.html 下载链接:https://pan.baidu.com/s/18vN9wWGbbNC2foEy4MfJEA 提取码:x081 解码密码:www.coolapk.com 也有docker版,个人感觉不太有必要,就没去折腾了,有兴趣的朋友可以看下: https://github.com/xhongc/music-tag-web 压缩包里面有很多个版本,解压新的1.0.9版本,双击MusicTag.exe打开 PC版界面朴实无华,首先点击左上图标更改工作目录:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 选择你存放音乐文件的NAS目录,samba方式(IP)访问就可以,如果歌曲很多可能需要多等一会儿,像我这就是三千多首都显示出来了,在右边选择其中一个文件,左边就会显示现有的信息,包括标题、艺术家、专辑、年份、歌词、封面等等:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 如果你的大部分音乐文件信息都比较全,那你可以在右侧按歌手或者专辑或者歌词排序,看看有哪些缺项的,复选这些文件来操作,懒的话也可以直接全选,点击顶部工具栏的魔棒按钮,在弹出的窗口里全选所有项目,点击确定:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 然后慢慢等待他全部刮削完成即可,准确率还是很高的。 如果发现有错误信息则需要手动修改,以歌词为例,可以在右边选中这个文件,点击左边歌词处的编辑按钮,再点击搜索后选择你需要的那个:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 这个软件所用的信息源是网易云和qq音乐,还是很靠谱的。 封面缺失的情况则要点击顶部工具栏的图片图标,在弹出的多张图片中选择你认为正确的那个:NAS上的私人音乐库——Navidrome搭建和整理,以及一些docker折腾笔记 修改了信息之后一定记得点击工具栏的保存! 这样一套操作下来,你也能整理出一个干净清爽的音乐库啦。 docker折腾笔记最近docker越来越难访问了,新手入坑有点难度,就再简单聊几句,也算是给自己的折腾做做笔记防止以后忘记了。 5.1 关于镜像拉取 现在docker hub无法访问了,很多镜像站也挂掉了,没挂的说不定也在挂的路上,拉不到镜像怎么办?要么现找新的镜像站,要么自己建一个,这里就有一个自建的路子: https://github.com/cmliu/CF-Workers-docker.io 感谢作者! 但是不管现成的镜像站还是自建的,我这边都不能直接在配置好群晖的注册表设置/威联通的自定义存储库之后使用自带的搜索功能,不知道你们可不可以?群晖我是用先SSH到NAS,然后在命令行里面输入 docker pull xx/aa/bb 上面的xx是你找到的或自建的镜像站地址,aa/bb是原始的镜像名字,举个例来说明更清楚一些: 本来你在某个教程上看到青龙面板的拉取命令是 docker pull whyour/qinglong 现在我们要用镜像站来拉,命令就变成了 docker pull docker.xxx.com/whyour/qinglong 把docker.xxx.com替换成镜像站的地址就行,不需要输入https://。
2025年12月30日
8 阅读
0 评论
0 点赞
2025-12-30
BookStack:一款功能强大的免费知识库管理平
在这个信息爆炸的时代,你是否经常感到无所适从?团队文档杂乱无章,个人笔记四处散落,重要信息总是找不到...如果这些问题困扰着你,那么 BookStack 可能就是你一直在寻找的解决方案。🌟 BookStack:不只是另一个文档系统BookStack 是一个开源的知识管理平台,它将文档组织得像一本书一样直观。想象一下,如果维基百科和你最爱的笔记 App 有个孩子,那大概就是 BookStack 了。基于 PHP 和 Laravel 构建,BookStack 不仅功能强大,还特别注重用户体验。无论你是技术大牛还是普通用户,都能轻松驾驭。💡 为什么选择 BookStack?结构清晰:采用"书籍 > 章节 > 页面"的层级结构,让内容组织一目了然。编辑灵活:支持所见即所得和 Markdown 编辑器,满足不同偏好。权限管理:细粒度的权限控制,完美适配团队协作需求。搜索强大:全文搜索功能,让你瞬间找到需要的信息。多语言支持:包括中文在内的多种语言界面,无障碍使用。导出方便:可以导出html、markdown、txt和pdf格式。开源免费:企业级功能,零成本使用。🛠 用 Docker 搭建 BookStackBookStack 的部署非常简单,特别是使用 Docker 的话。下面我们详细解释如何通过 Docker 部署 BookStack,并对每个参数进行说明。方法一:Docker 命令行部署docker run -d \ --name=bookstack \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Asia/Shanghai \ -e APP_URL=http://your-domain.com \ -e APP_KEY=base64:C4MCxJYaoUMj6Rpn2cMmHyycBlU0hizsoDEbOO7w2LQ= -e DB_HOST=bookstack_db \ -e DB_USER=bookstack \ -e DB_PASS=your_password \ -e DB_DATABASE=bookstack \ -p 6875:80 \ -v /path/to/data:/config \ --restart unless-stopped \ lscr.io/linuxserver/bookstack:latest参数解释:--name=bookstack:为容器指定一个名称,方便管理。-e PUID=1000 和 -e PGID=1000:设置用户和组 ID,确保容器内外的权限一致。-e APP_URL=http://your-domain.com:设置 BookStack 的访问 URL,请替换为你的实际域名。-e APP_KEY=base64:C4MCxJYaoUMj6Rpn2cMmHyycBlU0hizsoDEbOO7w2LQ=:设置 BookStack 会话加密密钥,使用ocker run -it --rm --entrypoint /bin/bash linuxserver/bookstack:latest appkey可以生成一个。TZ=Asia/Shanghai:指定时区,中国的就用这个即可。-e DB_HOST=bookstack_db:数据库主机名,如果使用外部数据库,请相应修改。-e DB_USERNAME=bookstack:数据库用户名。-e DB_PASSWORD=your_password:数据库密码,请使用强密码替换。-e DB_DATABASE=bookstack:数据库名称。-p 6875:80:端口映射,将容器的 80 端口映射到主机的 6875 端口。-v /path/to/data:/config:数据卷挂载,确保数据持久化,请替换为你的实际路径。--restart unless-stopped:容器自动重启策略。方法二:Docker Compose 部署创建一个 docker-compose.yml 文件,内容如下:version: "2"services: bookstack:image: lscr.io/linuxserver/bookstack:latest container_name: bookstack environment: - PUID=501 - PGID=20 - TZ=Asia/Shanghai - APP_URL=http://localhost:6875 - APP_KEY=base64:C4MCxJYaoUMj6Rpn2cMmHyycBlU0hizsoDEbOO7w2LQ= - DB_HOST=172.17.0.1 - DB_PORT=3306 - DB_USERNAME=root - DB_PASSWORD=123456 - DB_DATABASE=bookstack volumes: - /path/to/data:/config ports: - 6875:80 restart: unless-stopped depends_on: - bookstack_dbbookstack_db:image: lscr.io/linuxserver/mariadb:latest container_name: bookstack_db environment: - PUID=1000 - PGID=1000 - MYSQL_ROOT_PASSWORD=your_root_password - TZ=Europe/London - MYSQL_DATABASE=bookstack - MYSQL_USER=bookstack - MYSQL_PASSWORD=your_password volumes: - /path/to/database:/config restart: unless-stopped这个 docker-compose.yml 文件定义了两个服务:bookstack 和 bookstack_db。参数含义与单独运行 Docker 命令时相同,但这里我们同时部署了一个 MariaDB 数据库容器。运行以下命令启动服务:docker-compose up -d这个命令会在后台启动 BookStack 和其数据库,并自动开始初始化数据表。🚀 BookStack 使用指南成功部署后,访问 http://your-domain.com:6875(替换为你的实际域名和端口)就可以开始使用 BookStack 了,使用默认的账号admin@admin.com和密码password登录。以下是一些基本使用步骤:设置中文点击右上角的头像,找到"My Account > Profile Details",然后在Preferred Language中选择中文即可。创建你的第一本"书":点击"图书 > 立即创建",给你的第一本书起个名字。组织内容:按照"书籍 > 章节 > 页面"的结构组织你的内容。编写和格式化:使用所见即所得编辑器或 Markdown 编辑器创建内容。协作与分享:邀请团队成员,设置权限,开始协作。搜索和标签:使用强大的搜索功能和标签系统快速找到信息。📝 进阶技巧使用模板:为常用文档类型创建模板,提高效率。版本控制:利用 BookStack 的版本历史功能,轻松回溯修改。API 集成:使用 BookStack 的 API 将其与其他工具集成。🌈 结语BookStack 不仅仅是一个文档系统,它是一个全方位的知识管理解决方案。通过 Docker 的简单部署,你可以快速搭建起自己的知识库,让团队协作更加顺畅,个人学习更加高效。现在,你已经了解了如何部署和使用 BookStack。为什么不立即动手,创建你的第一本"书"呢?相信我,当你开始使用 BookStack,你会惊讶于自己生产力的提升。
2025年12月30日
5 阅读
0 评论
0 点赞
1
...
6
7
8
...
76