[内核源码][Makefile]修改linux-0.12代码

iTop-4412 SCP 精英版 linux-4.14.12 内核移植(1) 欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I... 阅读详情

修改linux-0.12代码,以让其能通过当前编译器编译
deal文件

#! /bin/bash

file_tar=linux-0.12
file_deal=Modify2Now

rm -rf $file_tar
tar -xzf "$file_tar.tar.gz"
cp $file_deal ./$file_tar
cd $file_tar
./$file_deal
make

Modify2Now文件

#! /bin/bash

echo "开始处理..."

# 这一部分是修改编译链接参数,以适用现在的编译器
find . -name Makefile|xargs sed -i 's/gas/as/g'
find . -name Makefile|xargs sed -i 's/gar/ar/g'
find . -name Makefile|xargs sed -i 's/gld/ld/g'
find . -name Makefile|xargs sed -i 's/-fcombine-regs//g'
find . -name Makefile|xargs sed -i 's/-mstring-insns//g'

find . -name Makefile|xargs sed -i 's/$(AS)/$(AS) --32/g'
find . -name Makefile|xargs sed -i 's/$(CC)/$(CC) -m32 -std=gnu11 -fgnu89-inline/g'
find . -name Makefile|xargs sed -i 's/$(LD)/$(LD) -m elf_i386 --oformat elf32-i386/g'
find . -name Makefile|xargs sed -i 's/$(CFLAGS)/$(CFLAGS) -ffreestanding/g' Makefile

sed -i '51s/-ffreestanding//g' Makefile
sed -i '51s/-m32//g' Makefile
sed -i '58s/$(LD)/$(LD) -e startup_32 -Ttext=0x0/g' Makefile

sync

# 这一部分是解决函数不返回问题
sed -i '20i extern inline void oom(void) __attribute__((noreturn));' include/linux/mm.h
sed -i '21s/volatile//g' include/linux/mm.h
sed -i '6s/volatile void do_exit(long error_code);/void do_exit(long error_code) __attribute__((noreturn));/g' include/linux/kernel.h
sed -i '262s/volatile//g' kernel/exit.c
sed -i '5s/volatile void panic(const char \* str);/void panic(const char \* str) __attribute__((noreturn));/g' include/linux/kernel.h
sed -i '62s/extern void panic(const char \* str);/extern void panic(const char \* str) __attribute__((noreturn));/g' include/linux/sched.h
sed -i '16s/volatile//g' kernel/panic.c
sed -i '225s/volatile void _exit(int status);/void _exit(int status) __attribute__((noreturn));/g' include/unistd.h
sed -i '10s/volatile//g' lib/_exit.c
sed -i '48s/extern void init(void);/extern void init(void) __attribute__((noreturn));/g' init/main.c

sync

# 这一部分是修改build工具中的两个函数名
sed -i 's/MAJOR(/major(/g' tools/build.c
sed -i 's/MINOR(/minor(/g' tools/build.c

sync

# 这一部分得处理好像违背了源代码得初衷
find . -name main.c|xargs sed -i 's/static inline/inline/g'
find . -name main.c|xargs sed -i 's/static int printf/int printf/g'

sync

# 将startup_32添加到符号表
sed -i '15s/.globl/.globl startup_32,/g' boot/head.s

sync

# 下面一部分是处理GCC旧版本在符号前添加下划线
find . -type f |xargs sed -i 's/_stack_start/stack_start/g'
find . -type f |xargs sed -i 's/_main/main/g'
find . -type f |xargs sed -i 's/_printk/printk/g'
find . -type f |xargs sed -i 's/_current/current/g'
find . -type f |xargs sed -i 's/_last_task_used_math/last_task_used_math/g'
find . -type f |xargs sed -i 's/_gdt/gdt/g'
find . -type f |xargs sed -i 's/_timer_interrupt/timer_interrupt/g'
find . -type f |xargs sed -i 's/_idt/idt/g'
find . -type f |xargs sed -i 's/_system_call/system_call/g'
find . -type f |xargs sed -i 's/_schedule/schedule/g'
find . -type f |xargs sed -i 's/_NR_syscalls/NR_syscalls/g'
find . -type f |xargs sed -i 's/_sys_call_table/sys_call_table/g'
find . -type f |xargs sed -i 's/_task/task/g'
find . -type f |xargs sed -i 's/_do_signal/do_signal/g'
find . -type f |xargs sed -i 's/_math_error/math_error/g'
find . -type f |xargs sed -i 's/_math_state_restore/math_state_restore/g'
find . -type f |xargs sed -i 's/_math_emulate/math_emulate/g'
find . -type f |xargs sed -i 's/_jiffies/jiffies/g'
find . -type f |xargs sed -i 's/_do_timer/do_timer/g'
find . -type f |xargs sed -i 's/_do_execve/do_execve/g'
find . -type f |xargs sed -i 's/_find_empty_process/find_empty_process/g'
find . -type f |xargs sed -i 's/_copy_process/copy_process/g'
find . -type f |xargs sed -i 's/_hd_timeout/hd_timeout/g'
find . -type f |xargs sed -i 's/_do_hd/do_hd/g'
find . -type f |xargs sed -i 's/_unexpected_hd_interrupt/unexpected_hd_interrupt/g'
find . -type f |xargs sed -i 's/_do_floppy/do_floppy/g'
find . -type f |xargs sed -i 's/_unexpected_floppy_interrupt/unexpected_floppy_interrupt/g'
find . -type f |xargs sed -i 's/_divide_error/divide_error/g'
find . -type f |xargs sed -i 's/_debug/debug/g'
find . -type f |xargs sed -i 's/_nmi/nmi/g'
find . -type f |xargs sed -i 's/_int3/int3/g'
find . -type f |xargs sed -i 's/_overflow/overflow/g'
find . -type f |xargs sed -i 's/_bounds/bounds/g'
find . -type f |xargs sed -i 's/_invalid_op/invalid_op/g'
find . -type f |xargs sed -i 's/_device_not_available/device_not_available/g'
find . -type f |xargs sed -i 's/_double_fault/double_fault/g'
find . -type f |xargs sed -i 's/_coprocessor_segment_overrun/coprocessor_segment_overrun/g'
find . -type f |xargs sed -i 's/_invalid_TSS/invalid_TSS/g'
find . -type f |xargs sed -i 's/_segment_not_present/segment_not_present/g'
find . -type f |xargs sed -i 's/_stack_segment/stack_segment/g'
find . -type f |xargs sed -i 's/_general_protection/general_protection/g'
find . -type f |xargs sed -i 's/_page_fault/page_fault/g'
find . -type f |xargs sed -i 's/_reserved/reserved/g'
find . -type f |xargs sed -i 's/_coprocessor_error/coprocessor_error/g'
find . -type f |xargs sed -i 's/_alignment_check/alignment_check/g'
find . -type f |xargs sed -i 's/_irq13/irq13/g'
find . -type f |xargs sed -i 's/_parallel_interrupt/parallel_interrupt/g'
find . -type f |xargs sed -i 's/_dodivide_error/dodivide_error/g'
find . -type f |xargs sed -i 's/_doint3/doint3/g'
find . -type f |xargs sed -i 's/_donmi/donmi/g'
find . -type f |xargs sed -i 's/_doint3/doint3/g'
find . -type f |xargs sed -i 's/_dooverflow/dooverflow/g'
find . -type f |xargs sed -i 's/_dobounds/dobounds/g'
find . -type f |xargs sed -i 's/_doinvalid_op/doinvalid_op/g'
find . -type f |xargs sed -i 's/_docoprocessor_segment_overrun/docoprocessor_segment_overrun/g'
find . -type f |xargs sed -i 's/_doreserved/doreserved/g'
find . -type f |xargs sed -i 's/_dodouble_fault/dodouble_fault/g'
find . -type f |xargs sed -i 's/_doinvalid_TSS/doinvalid_TSS/g'
find . -type f |xargs sed -i 's/_dosegment_not_present/dosegment_not_present/g'
find . -type f |xargs sed -i 's/_dostack_segment/dostack_segment/g'
find . -type f |xargs sed -i 's/_dogeneral_protection/dogeneral_protection/g'
find . -type f |xargs sed -i 's/_doalignment_check/doalignment_check/g'
find . -type f |xargs sed -i 's/_pg_dir/pg_dir/g'
find . -type f |xargs sed -i 's/_sys_fork/sys_fork/g'
find . -type f |xargs sed -i 's/_sys_execve/sys_execve/g'
find . -type f |xargs sed -i 's/_do_no_page/do_no_page/g'
find . -type f |xargs sed -i 's/_do_wp_page/do_wp_page/g'
find . -type f |xargs sed -i 's/_tmp_floppy_area/tmp_floppy_area/g'
find . -type f |xargs sed -i 's/_floppy_interrupt/floppy_interrupt/g'
find . -type f |xargs sed -i 's/_hd_interrupt/hd_interrupt/g'
find . -type f |xargs sed -i 's/_video_num_columns/video_num_columns/g'
find . -type f |xargs sed -i 's/_keyboard_interrupt/keyboard_interrupt/g'
find . -type f |xargs sed -i 's/_rs1_interrupt/rs1_interrupt/g'
find . -type f |xargs sed -i 's/_rs2_interrupt/rs2_interrupt/g'
find . -type f |xargs sed -i 's/_blankinterval/blankinterval/g'
find . -type f |xargs sed -i 's/_blankcount/blankcount/g'
find . -type f |xargs sed -i 's/_do_tty_interrupt/do_tty_interrupt/g'
find . -type f |xargs sed -i 's/_table_list/table_list/g'
find . -type f |xargs sed -i 's/_show_mem/show_mem/g'
find . -type f |xargs sed -i 's/_show_state/show_state/g'
find . -type f |xargs sed -i 's/_change_console/change_console/g'

sync

# 下面一部分是处理内敛汇编的新旧格式差异
sed -i '176s/:"ax"//g' init/main.c

sed -i '34s/:"si","di","ax"//g' include/string.h
sed -i '50s/:"si","di","ax","cx"//g' include/string.h
sed -i '64s/:"si","di","ax","cx"//g' include/string.h
sed -i '84s/:"si","di","ax","cx"//g' include/string.h
sed -i '103s/:"si","di"//g' include/string.h
sed -i '124s/:"si","di","cx"//g' include/string.h
sed -i '141s/:"si"//g' include/string.h
sed -i '157s/:"ax","si"//g' include/string.h
sed -i '181s/:"ax","cx","dx","di"//g' include/string.h
sed -i '205s/:"ax","cx","dx","di"//g' include/string.h
sed -i '232s/:"ax","cx","dx","di"//g' include/string.h
sed -i '259s/:"cx","dx","di","si"//g' include/string.h
sed -i '271s/:"di"//g' include/string.h
sed -i '332s/:"ax","cx","dx","di"//g' include/string.h
sed -i '342s/:"cx","si","di"//g' include/string.h
sed -i '353s/:"cx","si","di"//g' include/string.h
sed -i '359s/:"cx","si","di"//g' include/string.h
sed -i '375s/:"si","di","cx"//g' include/string.h
sed -i '391s/:"cx"//g' include/string.h
sed -i '401s/:"cx","di"//g' include/string.h

sed -i '248s/:"dx"//g' include/linux/sched.h

sed -i '45s/:"cx","di","si"//g' mm/memory.c

sed -i '191s/:"di","cx","dx"//g' mm/swap.c

sed -i '288s/:"cx","di","si"//g' fs/buffer.c

sed -i '27s/"r"/"q"/g' include/asm/segment.h

sed -i '260s/:"dx"//g' include/linux/sched.h

sed -i '82s/:"cx","di","si"//g' fs/namei.c

sed -i '17s/:"cx","di"//g' fs/bitmap.c
sed -i '44s/:"ax","dx","si"//g' fs/bitmap.c

sed -i '159s/:"cx","di","si"//g' kernel/blk_drv/floppy.c

sed -i '65s/:"cx","di"//g' kernel/blk_drv/hd.c
sed -i '68s/:"cx","si"//g' kernel/blk_drv/hd.c

sed -i '12s/:"di","si","cx"//g' include/asm/memory.h

sed -i '5s/"=r"/"=q"/g' include/asm/segment.h

sed -i '209s/:"cx","di","si"//g' kernel/chr_drv/console.c
sed -i '220s/:"cx","di"//g' kernel/chr_drv/console.c
sed -i '234s/:"cx","di","si"//g' kernel/chr_drv/console.c
sed -i '249s/:"cx","di","si"//g' kernel/chr_drv/console.c
sed -i '270s/:"ax","cx","di","si"//g' kernel/chr_drv/console.c
sed -i '285s/:"ax","cx","di","si"//g' kernel/chr_drv/console.c
sed -i '350s/:"cx","di"//g' kernel/chr_drv/console.c
sed -i '381s/:"cx","di"//g' kernel/chr_drv/console.c
sed -i '604s/:"ax"//g' kernel/chr_drv/console.c
sed -i '1020s/:"ax"//g' kernel/chr_drv/console.c

sync

# 处理左值问题
sed -i '162s/                   !(pag = (char \*) page\[p\/PAGE_SIZE\] =/                   !(pag = (char \*) (page\[p\/PAGE_SIZE\] =/g' fs/exec.c
sed -i '163s/                     (unsigned long \*) get_free_page())) /                      get_free_page()))) /g' fs/exec.c
sed -i '156s/(void \*)/\*(char \*)/g' lib/malloc.c
#sed -i '156s/get_free_page()/((char *)get_free_page())/g' lib/malloc.c

sync

# 处理新旧汇编代码中关于.align的差异
files=$(find . -name *.s)
files=${files}$'\n'$(find . -name *.S)
for file in $files
do
    sed -i 's/.align 2/.align 4/g' $file
    sed -i 's/.align 3/.align 8/g' $file
done

sync

# 处理其他问题
sed -i '190s/   if (\*p = tmp)/ if ((\*p = tmp) != NULL)/g' kernel/sched.c
sed -i '228s/   "ljmp %0\\n\\t" \\/ "ljmp \*%0\\n\\t" \\/g' include/linux/sched.h
sed -i '99s/    call sys_call_table(,%eax,4)/   call \*sys_call_table(,%eax,4)/g' kernel/sys_call.s
sed -i '120s/       if (f=p->filp\[i\])/        if ((f=p->filp\[i\]) != NULL)/g' kernel/fork.c
sed -i '59i     {' kernel/vsprintf.c
sed -i '62i     }' kernel/vsprintf.c
sed -i '76i     {' kernel/vsprintf.c
sed -i '82i     }' kernel/vsprintf.c
sed -i '214s/           if (err = send_sig(sig,\*p,0))/         if ((err = send_sig(sig,\*p,0)) != 0)/g' kernel/exit.c
sed -i 's/  if (p = current->p_cptr) {/ if ((p = current->p_cptr) != NULL) {/g' kernel/exit.c
sed -i '236i qualifier++;' kernel/vsprintf.c
sed -i '331s/       if (to = get_free_page())/      if ((to = get_free_page()) != 0)/g' mm/memory.c
sed -i '331i    {' mm/memory.c
sed -i '336i    }' mm/memory.c
sed -i '490i    {' mm/memory.c
sed -i '496i    }' mm/memory.c
sed -i '155i    {' mm/swap.c
sed -i '160i    }' mm/swap.c
sed -i '176s/asm/__asm__/g' mm/swap.c
sed -i '85s/            if (inode->i_zone\[block\]=new_block(inode->i_dev)) {/          if ((inode->i_zone\[block\]=new_block(inode->i_dev)) != 0) {/g' fs/inode.c
sed -i '94s/            if (inode->i_zone\[7\]=new_block(inode->i_dev)) {/          if ((inode->i_zone\[7\]=new_block(inode->i_dev)) != 0) {/g' fs/inode.c
sed -i '104s/           if (i=new_block(inode->i_dev)) {/           if ((i=new_block(inode->i_dev)) != 0) {/g' fs/inode.c
sed -i '113s/       if (inode->i_zone\[8\]=new_block(inode->i_dev)) {/      if ((inode->i_zone\[8\]=new_block(inode->i_dev)) != 0) {/g' fs/inode.c
sed -i '123s/       if (i=new_block(inode->i_dev)) {/       if ((i=new_block(inode->i_dev)) != 0) {/g' fs/inode.c
sed -i '134s/       if (i=new_block(inode->i_dev)) {/       if ((i=new_block(inode->i_dev)) != 0) {/g' fs/inode.c
sed -i '35i void put_super(int dev);' fs/buffer.c
sed -i '36i void invalidate_inodes(int dev);' fs/buffer.c
sed -i '213s/   if (bh = get_hash_table(dev,block))/    if ((bh = get_hash_table(dev,block)) != NULL)/g' fs/buffer.c
sed -i '305s/           if (bh\[i\] = getblk(dev,b\[i\]))/          if ((bh\[i\] = getblk(dev,b\[i\])) != NULL)/g' fs/buffer.c
sed -i '108s/   if (s = get_super(dev))/    if ((s = get_super(dev)) != NULL)/g' fs/super.c
sed -i '142s/       if (s->s_imap\[i\]=bread(dev,block))/       if ((s->s_imap\[i\]=bread(dev,block)) != NULL)/g' fs/super.c
sed -i '147s/       if (s->s_zmap\[i\]=bread(dev,block))/       if ((s->s_zmap\[i\]=bread(dev,block)) != NULL)/g' fs/super.c
sed -i '19s/typedef/typedef int/g' fs/char_dev.c
sed -i '25s/        if (nr = bmap(inode,(filp->f_pos)\/BLOCK_SIZE)) {/      if ((nr = bmap(inode,(filp->f_pos)\/BLOCK_SIZE)) != 0) {/g' fs/file_dev.c
sed -i '103s/   if (tmp = argv)/    if ((tmp = argv) != NULL)/g' fs/exec.c
sed -i '264d' fs/exec.c
sed -i "264i        if (!(cp = strchr(buf, \'\\\n\'))) {" fs/exec.c
sed -i '325s/   while (c=get_fs_byte(pathname++))/  while ((c=get_fs_byte(pathname++)) != 0)/g' fs/namei.c
sed -i '86s/        if (bh=sb->s_zmap\[i\])/        if (!(bh=sb->s_zmap\[i\]))/g' fs/bitmap.c
sed -i '150s/       if (bh=sb->s_imap\[i\])/        if (!(bh=sb->s_imap\[i\]))/g' fs/bitmap.c
sed -i '21s/    if (bh=bread(dev,block)) {/ if (!(bh=bread(dev,block))) {/g' fs/truncate.c
sed -i '25i     {' fs/truncate.c
sed -i '31i     }' fs/truncate.c
sed -i '50s/    if (bh=bread(dev,block)) {/ if (!(bh=bread(dev,block))) {/g' fs/truncate.c
sed -i '54i     {' fs/truncate.c
sed -i '60i     }' fs/truncate.c
sed -i '76s/        if (\*tpp = p->entry\[i\].oldtask)/     if (!(\*tpp = p->entry\[i\].oldtask))/g' fs/select.c
sed -i '107s/   if (tty = get_tty(inode))/  if (!(tty = get_tty(inode)))/g' fs/select.c
sed -i '108i    {' fs/select.c
sed -i '113i    }' fs/select.c
sed -i '115i    {' fs/select.c
sed -i '120i    }' fs/select.c
sed -i '128s/   if (tty = get_tty(inode))/  if (!(tty = get_tty(inode)))/g' fs/select.c
sed -i '145s/   if (tty = get_tty(inode))/  if (!(tty = get_tty(inode)))/g' fs/select.c
sed -i '146i    {' fs/select.c
sed -i '151i    }' fs/select.c
sed -i '153i    {' fs/select.c
sed -i '158i    }' fs/select.c
sed -i '129i    {' fs/select.c
sed -i '134i    }' fs/select.c
sed -i '136i    {' fs/select.c
sed -i '141i    }' fs/select.c
sed -i '92i     {' kernel/blk_drv/ll_rw_blk.c
sed -i '97i     }' kernel/blk_drv/ll_rw_blk.c
sed -i '115s/   if (rw_ahead = (rw == READA || rw == WRITEA)) {/    if (!(rw_ahead = (rw == READA || rw == WRITEA))) {/g' kernel/blk_drv/ll_rw_blk.c
sed -i '39i void init_swapping(void);' kernel/blk_drv/hd.c
sed -i '192s/asm/__asm__/g' kernel/blk_drv/hd.c



sync

echo "处理完成!"
可以直接make的linux-0.11源码 可以直接make的linux-0.11源码,得到Image 立即下载

相关推荐

Linux-0.12:重新编写Linux0.12源代码,可以能够通过gcc(4.9.2或更高版本)进行编译,并且运行良好

Linux-0.12 重新编写Linux0.12源代码,可以能够通过gcc(4.9.2或更高版本)进行编译,并且运行良好。

自己动手搭建 Linux 0.12 编译环境 — Linux主机

Hi,又见面了,这两天事情比较少,所以又快速构思这篇的内容。 上篇我用极简模式说完了关于Linux 0.12的模拟环境Bochs,这篇同样沿袭上篇的思路,不过主要内容是关于Linux主机。在搭建Linux 0.12编译环境的时候,你需要一个Linux主机环境来完成几乎你想实现的所有工作,这里我选择了CentOS,这完全又是一个巧合,我一开始也是使用的是Ubuntu,后来为什么换成CentOS了,

MTK_蛙蛙鱼 2811

别再魔改LWIP了!用STM32CubeMX配置F407的TCP保活(KeepAlive)与自动重连

本文详细介绍了如何通过STM32CubeMX配置STM32F407的LWIP协议栈,实现TCP保活(KeepAlive)与自动重连功能,解决网络异常断开问题。文章提供了从基础环境配置到自动重连架构设计的完整指南,帮助开发者构建高可靠的网络连接机制,适用于工业物联网和嵌入式设备开发。

weixin_27038245的博客 234

编译运行linux0.12,linux0.12 编译过程

感谢这篇文章的作者: http://www.cnblogs.com/strugglesometimes/p/4231359.html编译是个很蛋疼的事情,本想把linux0.12在bochs上跑起来然后就可以各模块的学习,没想各种问题。问题1:1 gas -c -o boot/head.o boot/head.s2 make: gas: Command not foundgas已过时,将所有...

weixin_29370183的博客 1016

使用podman 容器化安装DIFY

本文阐述了使用podman容器化安装DIFY的过程

wengad的博客 1901

笔记本摄像头模拟监控推送RTSP流

FFmpeg软件:选择Windows builds by BtbN一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。选择Windows版本EasyDarwin开源流媒体服务器 支持Windows、Linux、macOS平台;支持RTSP推流分发(推模式转发);支持RTSP拉流分发(拉模式转发);VLC Media Player软件:选择Windows64bit支持众多与及文件格式,并支持DVD影音光盘,VCD影音光盘及各类协议。

IT_LittleBaby的博客 3873

Linux0.12编译与Clion调试

Linux0.12编译与Clion调试 1.简介 1.修改了部分c以及汇编代码,可以通过GCC最新版本编译通过(本人电脑macOS Catalina 10.15;gcc version 10.3.0 (GCC)) 2.学习资料放在源码目录下的study,可以查阅用 2.编译源码 下载源码https://github.com/galis/linux-0.12 修改源码根目录下的Makefile文件,把下面几个路径修改成你电脑的 export KERNEL_INCLUDE = /Volumes/mac-co

hjq842382134的专栏 1242

磁悬浮轴承控制策略设计及性能对比

摘要:针对高速磁悬浮转子控制问题,本文提出多方案对比分析。建立含陀螺效应的5自由度动力学模型,分析陀螺耦合、质量不平衡等关键挑战。对比四种控制策略:基础PID解耦、交叉反馈+自适应陷波、H∞鲁棒+前馈补偿、滑模控制+观测器,从实时性、鲁棒性等维度评估优劣。推荐采用交叉反馈+H∞+自适应陷波的混合方案,通过内环电流环与外环位置环协同,实现陀螺效应动态解耦和扰动抑制。实施步骤包括系统辨识、控制器设计、硬件部署等,需配合实验验证与参数整定。该方案综合性能最优,适用于高转速、强扰动场景。

技术工作者 1773

linux0.12 编译过程

感谢这篇文章的作者: http://www.cnblogs.com/strugglesometimes/p/4231359.html 编译是个很蛋疼的事情,本想把linux0.12在bochs上跑起来然后就可以各模块的学习,没想各种问题。 问题1: 1 gas -c -o boot/head.o boot/head.s 2 make: gas: Command n...

dielucui7698的博客 710

DDR4技术原理详解

DDR4是DDR4-SDRAM的简写,即第4代DDR-SDRAM,DDR-SDRAM全称Double Date Rate Synchronous Dynamic Random Access Memory。本文重点解析DDR4技术规范及其背后的电子电路原理,以及编程使用DDR4过程中需要注意的性能事项。

ctbinzi的专栏 1万+

ESP32设备驱动-TB6612FNG直流电机驱动

TB6612FNG 是一款出色的双电机驱动器,非常适合将两个小型直流电机(例如微型金属齿轮电机)连接到微控制器,它还可以用于控制单个双极步进电机。 基于 MOSFET 的 H 桥比 L298N 和 Sanyo 的 LB1836M 等旧式驱动器中使用的基于 BJT 的 H 桥效率高得多,后者允许将更多电流输送到电机,而从逻辑电源汲取的电流更少 (对于真正低电压的应用,LB1836 仍然具有 TB6612 的优势)。

视觉与物联智能 3402

Linux 0.1x所有环境搭建(bochs运行0.12内核+和0.12传递文件+编译运行简单例程)

环境搭建 电脑环境: OS: Deepin 15.11 stable Kernel: x86_64 Linux 4.15.0-30deepin-generic 在bochs运行0.12内核 bochs:apt install bochs(自己编译麻烦) 默认安装目录: 主(工作)目录:/usr/local/bin,作用:配置文件,磁盘和bochs img工具 默认配置(没啥用:/usr/local/share/doc/bochs 用到的BIOS ROM和显卡ROM:/usr/local/share/bo

_llc的博客 2069

解密Whisper模型与Speaker Diarization的结合

本文介绍了如何将Whisper语音识别模型与Speaker Diarization(说话人分割)技术相结合,实现多人对话场景下的语音转录和说话人识别。文章详细讲解了技术背景、环境配置和代码实现方法,通过Pyannote进行说话人分割,结合Whisper进行语音转文本,最终输出包含说话人信息的完整转录结果。该解决方案适用于会议记录、访谈分析等场景,显著提升了语音处理的应用价值。

2501_90323865的博客 152

linux实验三makefile,linux内核编译生成makefile文件实验报告.doc

linux内核编译生成makefile文件实验报告操作系统实验报告姓名: 学号:一、实验题目1.编译linux内核2.使用autoconf和automake工具为project工程自动生成Makefile,并测试3.在内核中添加一个模块二、实验目的1.了解一些命令提示符,也里了解一些linux系统的操作。2.练习使用autoconf和automake工具自动生成Makefil...

weixin_29356805的博客 707

VN5620以太网测试——环境搭建篇

CANoe(CAN open environment)VN5620 :是一个紧凑而强大的接口,用于以太网网络的分析、仿真、测试和验证。VN5620 接口支持各种可能的应用。它适用于与其他总线系统、网络参与(例如在模拟和生成帧、测试中的负载和错误)的同步以太网监控。在2021年Vector公司的以太网接口卡VN5610和VN5640设备已经陆续停产,相应被VN5620和VN5650代替。

诊断协议那些事儿's blog 8927

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

linux0.00内核编译,64位系统下编译linux0.00内核

这里的0.00版的内核指的是赵炯博士在《Linux内核完全剖析-基于0.12内核》第四章中给出的一个简单的多任务内核源码。在64位系统下编译此内核会遇到很多问题,而网络上的参考资料多有不实之处,这里列出了本人具体的实践过程,以作备忘,也希望能帮到大家。实验环境:主机系统:MacOS:10.14虚拟机:Oracle VirtualBox:6.0虚拟操作系统:Ubuntu:18.04 X86-64a...

weixin_30140093的博客 298

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

嵌入式linux2.6.12内核源码树配置及hello_world模块实验

前面说到要编写Linux 2.6的驱动,必须建立内核源码树,前面建立的源码树是针对i686平台的,但是我么嵌入式系统用的是arm平台,所以也要建立arm平台的内核源码树。 首先下载与你嵌入式系统平台版本号一致的linux内核,我的版本为2.6.30. 第一步:先解压源代码 tar -jxvf linux-2.6.30.tar.bz2 第二步:进入刚才解压后的目录linux-2.6

自由的代价永远是警惕 984

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

建立内核源码树 --部分为转载

1,什么是内核源码树?        内核源码树我现在的理解就是整个linux内核源代码,它是编译驱动的前提。Ubuntu系统默认情况下是没有的。内核源码树是要自己下载的。 2,为什么要编译内核源码树?       驱动最终以*.ko的形式生成,insmod的本质就是将ko文件与运行的内核进行链接的过程。类似于编译helloworld的链接。 1. 下载内源代码,位置www

u013637989的专栏 783

Linux Kernel ccflags/Android 12 GKI

外部模块头文件的检索:当编译的目标模块依赖多个头文件时,kbuild对头文件的搜索位置有这样的规定:(1) 直接放置在 Makefile 同在的目录下,在编译时当前目录会被添加到头文件搜索目录。(2) 放置在系统目录,这个系统目录是源代码目录中的 include,注意是源代码目录而不是系统目录的。

Android驱动开发 4699

Linux驱动开发-02-编译驱动程序并安装模块

1. 说明 编译驱动程序既可以在内核源码中进行,这样可以通过make menuconfig来配置,也可以通过使用源码环境而不在源码中编译。生成ko文件,自己进行安装模块。 2. 不在内核源码中编译 源码 这种方式比较简单,主要在于Makefile文件的编写。直接上源码。 hello.c #include <linux/init.h> #include <linux/module....

爱自在的专栏 580

usbip linux源码,USBIP开发环境搭建

环境:Fedora 12 (linux-2.6.31.5)内核: linux-2.6.31.5GCC: 4.4.2STEP 1: 启动Fedora 12,查看Fedora 12的内核版本号,GCC版本号。明白这些后方便以后排错。STEP 2:下载一个与Fedora 12相同版本的内核源代码linux-2.6.31.5,否则实验时一般会出现奇怪错误。为什么需要这个内核代码?因为Fedora 12自身...

weixin_29195137的博客 920

Linux内核移植实战:从Makefile到设备树的开发板适配

本文详细介绍了Linux内核移植的完整流程,从Makefile配置到设备树修改的开发板适配实战。通过编译环境搭建、内核源码配置、自动化脚本编写等步骤,帮助开发者掌握针对特定硬件进行Linux内核定制和驱动调试的核心技术,解决移植过程中的常见问题。

nginx7reverse的博客 1073

构建嵌入式系统交叉内核源码树

在学习过程中,发现几乎所有的驱动书籍都忽略了一个问题,那就是内核源码树的构建编译。而网上大部分的资料也都忽略或者没写清楚了一个问题,当开发板的内核版本和PC机的内核版本不一致时,当开发板和pc机CPU架构不一致时内核源码树的构建。以及当内核版本不一致时Makefile的编写细节。 例如,我的系统是Ubuntu12.04,内核版本是3.8.0-36,CPU架构是x86;而我的开发板版本是2.6.3

零界 2140

如何编译Android内核源码

工作环境及所需软件包 系统环境:Redhat Linux 9.0以上版本 交叉编译器:GNU Toolchain for ARM Processors 下载地址:http://www.codesourcery.com/gnu_toolchains/arm/download.html 其中第一项选择ARM EABI或ARM GNU/Linux,第二项选择IA32 GNU/Linux即可。

wanjf_912的专栏 2370

bochs+gdb源码级调试linux 0.12内核测试环境构建,bochs+gdb源码级调试Linux 0.12内核测试环境构建...

之前都是用的bochs自带的debug功能,但是linux内核大部分都是用C语言来实现的,若仅通过反汇编的汇编来学习,太累了。。。所以今天花了一个上午的时间,搭建起了bochs+gbd的联调huanjing。安装环境:Ubuntu 11.04 (2.6.38) bochs 2.4.6 gdb 4.5.2首先还是要安装bochs,仍然是推荐使用最新的版本(2.4.6),如果使用像2.3.6等老版本,...

weixin_42128315的博客 168

linux内核makefile编译过程学习(2)

all 是默认目标,如果使用命令make或者make all编译 Linux 的话此目标就会被匹配。KBUILD_EXTMOD 为空的,因此194 行的代码成立, 因此_all依赖all。all又依赖vmlinux,开始编译vmlinux。

2301_79302469的博客 44
上一篇: [代码实例][Bash]创建时间相关的目录
下一篇: [编程语言][C语言]C语言巨坑
cloudblaze
博客等级 码龄17年 81粉丝 125原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值