Aurix 多核链接文件 lsl --- 上篇
/*本链接文件 为免费自带 实例lsl, 如有侵权,请告知*/
/*理解不透彻,还请多担待,多交流 -- (手动狗头)*/
/*字数太多,无法上传,分上下两部分,下一篇介绍 /*sections 布局设计,包括数据存放位置,程序存放位置等信息*/ */
/*定义 core0 的 上下文空间,用户栈空间,中断空间*/
#define LCF_CSA0_SIZE 8k
#define LCF_USTACK0_SIZE 2k
#define LCF_ISTACK0_SIZE 1k
/*定义 core1 的 上下文空间,用户栈空间,中断空间*/
#define LCF_CSA1_SIZE 8k
#define LCF_USTACK1_SIZE 2k
#define LCF_ISTACK1_SIZE 1k
/*定义 core2 的 上下文空间,用户栈空间,中断空间*/
#define LCF_CSA2_SIZE 8k
#define LCF_USTACK2_SIZE 2k
#define LCF_ISTACK2_SIZE 1k
/*定义 core3 的 上下文空间,用户栈空间,中断空间*/
#define LCF_CSA3_SIZE 8k
#define LCF_USTACK3_SIZE 2k
#define LCF_ISTACK3_SIZE 1k
/*定义 core4 的 上下文空间,用户栈空间,中断空间*/
#define LCF_CSA4_SIZE 8k
#define LCF_USTACK4_SIZE 2k
#define LCF_ISTACK4_SIZE 1k
/*定义 core5 的 上下文空间,用户栈空间,中断空间*/
#define LCF_CSA5_SIZE 8k
#define LCF_USTACK5_SIZE 2k
#define LCF_ISTACK5_SIZE 1k
/*定义堆空间*/
#define LCF_HEAP_SIZE 4k
/*定义CPU cores*/
#define LCF_CPU0 0
#define LCF_CPU1 1
#define LCF_CPU2 2
#define LCF_CPU3 3
#define LCF_CPU4 4
#define LCF_CPU5 5
/*Un comment one of the below statements to enable CpuX DMI RAM to hold global variables*/
#define LCF_DEFAULT_HOST LCF_CPU0
/*#define LCF_DEFAULT_HOST LCF_CPU1*/
/*#define LCF_DEFAULT_HOST LCF_CPU2*/
/*#define LCF_DEFAULT_HOST LCF_CPU3*/
/*#define LCF_DEFAULT_HOST LCF_CPU4*/
/*#define LCF_DEFAULT_HOST LCF_CPU5*/
/* Data Scratch Memory core5 数据ram 大小和 起始 位置*/
#define LCF_DSPR5_START 0x10000000
#define LCF_DSPR5_SIZE 96k
/* Data Scratch Memory core4 数据ram 大小和 起始 位置*/
#define LCF_DSPR4_START 0x30000000
#define LCF_DSPR4_SIZE 96k
/* Data Scratch Memory core3 数据ram 大小和 起始 位置*/
#define LCF_DSPR3_START 0x40000000
#define LCF_DSPR3_SIZE 96k
/* Data Scratch Memory core2 数据ram 大小和 起始 位置*/
#define LCF_DSPR2_START 0x50000000
#define LCF_DSPR2_SIZE 96k
/* Data Scratch Memory core1 数据ram 大小和 起始 位置*/
#define LCF_DSPR1_START 0x60000000
#define LCF_DSPR1_SIZE 240k
/* Data Scratch Memory core0 数据ram 大小和 起始 位置*/
#define LCF_DSPR0_START 0x70000000
#define LCF_DSPR0_SIZE 240k
/*core5 上下文偏移地址*/
/*96 - 1 - 8 = 87 = 87 * 1024 = 0x00015C00*/
#define LCF_CSA5_OFFSET (LCF_DSPR5_SIZE - 1k - LCF_CSA5_SIZE)
/*core5 中断栈区偏移地址*/
/*87*1024 - 256 - 1*1024 = 0x00015700*/
#define LCF_ISTACK5_OFFSET (LCF_CSA5_OFFSET - 256 - LCF_ISTACK5_SIZE)
/*core5 用户栈区偏移地址*/
/*87*1024 - 256 - 1*1024 - 256 - 2*1024 = 0x00014E00*/
#define LCF_USTACK5_OFFSET (LCF_ISTACK5_OFFSET - 256 - LCF_USTACK5_SIZE)
/*同core5 计算*/
#define LCF_CSA4_OFFSET (LCF_DSPR4_SIZE - 1k - LCF_CSA4_SIZE)
#define LCF_ISTACK4_OFFSET (LCF_CSA4_OFFSET - 256 - LCF_ISTACK4_SIZE)
#define LCF_USTACK4_OFFSET (LCF_ISTACK4_OFFSET - 256 - LCF_USTACK4_SIZE)
/*同core5 计算*/
#define LCF_CSA3_OFFSET (LCF_DSPR3_SIZE - 1k - LCF_CSA3_SIZE)
#define LCF_ISTACK3_OFFSET (LCF_CSA3_OFFSET - 256 - LCF_ISTACK3_SIZE)
#define LCF_USTACK3_OFFSET (LCF_ISTACK3_OFFSET - 256 - LCF_USTACK3_SIZE)
/*同core5 计算*/
#define LCF_CSA2_OFFSET (LCF_DSPR2_SIZE - 1k - LCF_CSA2_SIZE)
#define LCF_ISTACK2_OFFSET (LCF_CSA2_OFFSET - 256 - LCF_ISTACK2_SIZE)
#define LCF_USTACK2_OFFSET (LCF_ISTACK2_OFFSET - 256 - LCF_USTACK2_SIZE)
/*同core5 计算*/
#define LCF_CSA1_OFFSET (LCF_DSPR1_SIZE - 1k - LCF_CSA1_SIZE)
#define LCF_ISTACK1_OFFSET (LCF_CSA1_OFFSET - 256 - LCF_ISTACK1_SIZE)
#define LCF_USTACK1_OFFSET (LCF_ISTACK1_OFFSET - 256 - LCF_USTACK1_SIZE)
/*同core5 计算*/
#define LCF_CSA0_OFFSET (LCF_DSPR0_SIZE - 1k - LCF_CSA0_SIZE)
#define LCF_ISTACK0_OFFSET (LCF_CSA0_OFFSET - 256 - LCF_ISTACK0_SIZE)
#define LCF_USTACK0_OFFSET (LCF_ISTACK0_OFFSET - 256 - LCF_USTACK0_SIZE)
/*定义堆区偏移地址 e.g.core5 0x00014E00 - 4*1024 = 0x00013E00*/
#define LCF_HEAP0_OFFSET (LCF_USTACK0_OFFSET - LCF_HEAP_SIZE)
#define LCF_HEAP1_OFFSET (LCF_USTACK1_OFFSET - LCF_HEAP_SIZE)
#define LCF_HEAP2_OFFSET (LCF_USTACK2_OFFSET - LCF_HEAP_SIZE)
#define LCF_HEAP3_OFFSET (LCF_USTACK3_OFFSET - LCF_HEAP_SIZE)
#define LCF_HEAP4_OFFSET (LCF_USTACK4_OFFSET - LCF_HEAP_SIZE)
#define LCF_HEAP5_OFFSET (LCF_USTACK5_OFFSET - LCF_HEAP_SIZE)
/*定义各个核中断向量表起始地址,由此可见中断向量表起始地址都在每个core的Program flash空间的倒数8k的位置*/
#define LCF_INTVEC0_START 0x802FE000
#define LCF_INTVEC1_START 0x805FE000
#define LCF_INTVEC2_START 0x808FE000
#define LCF_INTVEC3_START 0x80BFE000
#define LCF_INTVEC4_START 0x80EFE000
#define LCF_INTVEC5_START 0x80FFE000
/*定义各个核trap(陷阱)向量表的起始位置,由此可见除了core0在pflash隔了100个bytes位起始位置,其他core 都是 pflash的起始位置*/
#define LCF_TRAPVEC0_START 0x80000100
#define LCF_TRAPVEC1_START 0x80300000
#define LCF_TRAPVEC2_START 0x80600000
#define LCF_TRAPVEC3_START 0x80900000
#define LCF_TRAPVEC4_START 0x80C00000
#define LCF_TRAPVEC5_START 0x80F00000
/*定义各个cores 起始指针位置(允许cache访问)*/
#define LCF_STARTPTR_CPU0 0x80000000
#define LCF_STARTPTR_CPU1 0x80300100
#define LCF_STARTPTR_CPU2 0x80600100
#define LCF_STARTPTR_CPU3 0x80900100
#define LCF_STARTPTR_CPU4 0x80C00100
#define LCF_STARTPTR_CPU5 0x80F00100
/*定义各个cores 起始指针位置(不允许cache访问)*/
#define LCF_STARTPTR_NC_CPU0 0xA0000000
#define LCF_STARTPTR_NC_CPU1 0xA0300100
#define LCF_STARTPTR_NC_CPU2 0xA0600100
#define LCF_STARTPTR_NC_CPU3 0xA0900100
#define LCF_STARTPTR_NC_CPU4 0xA0C00100
#define LCF_STARTPTR_NC_CPU5 0xA0F00100
/*中断向量表 和 trap 向量表*/
#define INTTAB0 (LCF_INTVEC0_START)
#define INTTAB1 (LCF_INTVEC1_START)
#define INTTAB2 (LCF_INTVEC2_START)
#define INTTAB3 (LCF_INTVEC3_START)
#define INTTAB4 (LCF_INTVEC4_START)
#define INTTAB5 (LCF_INTVEC5_START)
#define TRAPTAB0 (LCF_TRAPVEC0_START)
#define TRAPTAB1 (LCF_TRAPVEC1_START)
#define TRAPTAB2 (LCF_TRAPVEC2_START)
#define TRAPTAB3 (LCF_TRAPVEC3_START)
#define TRAPTAB4 (LCF_TRAPVEC4_START)
#define TRAPTAB5 (LCF_TRAPVEC5_START)
/*定义reset位置位core0的起始指针位置(不运行cache访问)*/
#define RESET LCF_STARTPTR_NC_CPU0
#include "tc1v1_6_2.lsl"
// Specify a multi-core processor environment (mpe)
/*多核环境 芯片 Tc397*/
processor mpe
{
derivative = tc39;
}
/*各个核架构定义*/
derivative tc39
{
core tc0
{
architecture = TC1V1.6.2;
space_id_offset = 100; // add 100 to all space IDs in the architecture definition
copytable_space = vtc:linear; // use the copy table in the virtual core for 'bss' and initialized data sections
}
core tc1 // core 1 TC16E
{
architecture = TC1V1.6.2;
space_id_offset = 200; // add 200 to all space IDs in the architecture definition
copytable_space = vtc:linear; // use the copy table in the virtual core for 'bss' and initialized data sections
}
core tc2 // core 2 TC16P
{
architecture = TC1V1.6.2;
space_id_offset = 300; // add 300 to all space IDs in the architecture definition
copytable_space = vtc:linear; // use the copy table in the virtual core for 'bss' and initialized data sections
}
core tc3 // core 3 TC16P
{
architecture = TC1V1.6.2;
space_id_offset = 400; // add 300 to all space IDs in the architecture definition
copytable_space = vtc:linear; // use the copy table in the virtual core for 'bss' and initialized data sections
}
core tc4 // core 4 TC16P
{
architecture = TC1V1.6.2;
space_id_offset = 500; // add 300 to all space IDs in the architecture definition
copytable_space = vtc:linear; // use the copy table in the virtual core for 'bss' and initialized data sections
}
core tc5 // core 5 TC16P
{
architecture = TC1V1.6.2;
space_id_offset = 600; // add 300 to all space IDs in the architecture definition
copytable_space = vtc:linear; // use the copy table in the virtual core for 'bss' and initialized data sections
}
core vtc
{
architecture = TC1V1.6.2;
import tc0; // add all address spaces of core tc0 to core vtc for linking and locating
import tc1; // tc1
import tc2; // tc2
import tc3; // tc3
import tc4; // tc4
import tc5; // tc5
}
/*内部数据bus定义*/
bus sri
{
mau = 8; // 最小地址单位
width = 32; // 地址行数
/* map关键字指定此总线如何映射到另一个总线 */
// map shared addresses one-to-one to real cores and virtual cores
/*
dest 参数指定目的地址。这可以是一个总线或另一个地址空间(仅适用于空间到空间的映射)。这个参数是必需的。
src_offset 参数指定源地址的偏移量。与size一起,它指定了映射的地址范围。缺省情况下,源偏移量为0x0000。
size 参数指定被映射的地址数量。这个参数是必需的。
dest_offset 参数指定指定地址范围映射到的目标地址的位置。缺省情况下,目的偏移量为0x0000。
*/
map (dest=bus:tc0:fpi_bus, src_offset=0, dest_offset=0, size=0xc0000000);
map (dest=bus:tc1:fpi_bus, src_offset=0, dest_offset=0, size=0xc0000000);
map (dest=bus:tc2:fpi_bus, src_offset=0, dest_offset=0, size=0xc0000000);
map (dest=bus:tc3:fpi_bus, src_offset=0, dest_offset=0, size=0xc0000000);
map (dest=bus:tc4:fpi_bus, src_offset=0, dest_offset=0, size=0xc0000000);
map (dest=bus:tc5:fpi_bus, src_offset=0, dest_offset=0, size=0xc0000000);
map (dest=bus:vtc:fpi_bus, src_offset=0, dest_offset=0, size=0xc0000000);
}
/*数据*/
memory dsram5 // Data Scratch Pad Ram
{
mau = 8;
size = 96k;
type = ram;
/*priority:
如果定义内存,可以使用关键字priority和exec_priority在映射上设置定位优先级。
这些优先级的值是相对的,这意味着它们增加了内存的优先级。
内存上的优先级设置适用于通过内存映射可达的所有地址空间区域,
而映射上的优先级设置仅适用于通过映射可达的地址空间区域。
优先级最高的内存映射在定位时优先考虑。
若要仅为非可执行(数据)部分设置优先级,请添加具有所需值的priority关键字,
并将exec_priority设置为0。要仅为可执行(代码)部分设置优先级,
只需将exec_priority关键字设置为所需的值。
*/
map (dest=bus:tc5:fpi_bus, dest_offset=0xd0000000, size=96k, priority=8);
map (dest=bus:sri, dest_offset=0x10000000, size=96k);
}
/*程序*/
memory psram5 // Program Scratch Pad Ram
{
mau = 8;
size = 64k;
type = ram;
map (dest=bus:tc5:fpi_bus, dest_offset=0xc0000000, size=64k, priority=8);
map (dest=bus:sri, dest_offset=0x10100000, size=64k);
}
memory dsram4 // Data Scratch Pad Ram
{
mau = 8;
size = 96k;
type = ram;
map (dest=bus:tc4:fpi_bus, dest_offset=0xd0000000, size=96k, priority=8);
map (dest=bus:sri, dest_offset=0x30000000, size=96k);
}
memory psram4 // Program Scratch Pad Ram
{
mau = 8;
size = 64k;
type = ram;
map (dest=bus:tc4:fpi_bus, dest_offset=0xc0000000, size=64k, priority=8);
map (dest=bus:sri, dest_offset=0x30100000, size=64k);
}
memory dsram3 // Data Scratch Pad Ram
{
mau = 8;
size = 96k;
type = ram;
map (dest=bus:tc3:fpi_bus, dest_offset=0xd0000000, size=96k, priority=8);
map (dest=bus:sri, dest_offset=0x40000000, size=96k);
}
memory psram3 // Program Scratch Pad Ram
{
mau = 8;
size = 64k;
type = ram;
map (dest=bus:tc3:fpi_bus, dest_offset=0xc0000000, size=64k, priority=8);
map (dest=bus:sri, dest_offset=0x40100000, size=64k);
}
memory dsram2 // Data Scratch Pad Ram
{
mau = 8;
size = 96k;
type = ram;
map (dest=bus:tc2:fpi_bus, dest_offset=0xd0000000, size=96k, priority=8);
map (dest=bus:sri, dest_offset=0x50000000, size=96k);
}
memory psram2 // Program Scratch Pad Ram
{
mau = 8;
size = 64k;
type = ram;
map (dest=bus:tc2:fpi_bus, dest_offset=0xc0000000, size=64k, priority=8);
map (dest=bus:sri, dest_offset=0x50100000, size=64k);
}
memory dsram1 // Data Scratch Pad Ram
{
mau = 8;
size = 240k;
type = ram;
map (dest=bus:tc1:fpi_bus, dest_offset=0xd0000000, size=240k, priority=8);
map (dest=bus:sri, dest_offset=0x60000000, size=240k);
}
memory psram1 // Program Scratch Pad Ram
{
mau = 8;
size = 64k;
type = ram;
map (dest=bus:tc1:fpi_bus, dest_offset=0xc0000000, size=64k, priority=8);
map (dest=bus:sri, dest_offset=0x60100000, size=64k);
}
memory dsram0 // Data Scratch Pad Ram
{
mau = 8;
size = 240k;
type = ram;
map (dest=bus:tc0:fpi_bus, dest_offset=0xd0000000, size=240k, priority=8);
map (dest=bus:sri, dest_offset=0x70000000, size=240k);
}
memory psram0 // Program Scratch Pad Ram
{
mau = 8;
size = 64k;
type = ram;
map (dest=bus:tc0:fpi_bus, dest_offset=0xc0000000, size=64k, priority=8);
map (dest=bus:sri, dest_offset=0x70100000, size=64k);
}
memory pfls0
{
mau = 8;
size = 3M;
type = rom;
map cached (dest=bus:sri, dest_offset=0x80000000, size=3M);
map not_cached (dest=bus:sri, dest_offset=0xa0000000, reserved, size=3M);
}
memory pfls1
{
mau = 8;
size = 3M;
type = rom;
map cached (dest=bus:sri, dest_offset=0x80300000, size=3M);
map not_cached (dest=bus:sri, dest_offset=0xa0300000, reserved, size=3M);
}
memory pfls2
{
mau = 8;
size = 3M;
type = rom;
map cached (dest=bus:sri, dest_offset=0x80600000, size=3M);
map not_cached (dest=bus:sri, dest_offset=0xa0600000, reserved, size=3M);
}
memory pfls3
{
mau = 8;
size = 3M;
type = rom;
map cached (dest=bus:sri, dest_offset=0x80900000, size=3M);
map not_cached (dest=bus:sri, dest_offset=0xa0900000, reserved, size=3M);
}
memory pfls4
{
mau = 8;
size = 3M;
type = rom;
map cached (dest=bus:sri, dest_offset=0x80c00000, size=3M);
map not_cached (dest=bus:sri, dest_offset=0xa0c00000, reserved, size=3M);
}
memory pfls5
{
mau = 8;
size = 1M;
type = rom;
map cached (dest=bus:sri, dest_offset=0x80f00000, size=1M);
map not_cached (dest=bus:sri, dest_offset=0xa0f00000, reserved, size=1M);
}
memory dfls0
{
mau = 8;
size = 1M;
type = reserved nvram;
map (dest=bus:sri, dest_offset=0xaf000000, size=1M );
}
memory ucb
{
mau = 8;
size = 24k;
type = rom;
map (dest=bus:sri, dest_offset=0xaf400000, reserved, size=24k);
}
memory cpu0_dlmu
{
mau = 8;
size = 64k;
type = ram;
map cached (dest=bus:sri, dest_offset=0x90000000, size=64k);
map not_cached (dest=bus:sri, dest_offset=0xb0000000, reserved, size=64k);
}
memory cpu1_dlmu
{
mau = 8;
size = 64k;
type = ram;
map cached (dest=bus:sri, dest_offset=0x90010000, size=64k);
map not_cached (dest=bus:sri, dest_offset=0xb0010000, reserved, size=64k);
}
memory cpu2_dlmu
{
mau = 8;
size = 64k;
type = ram;
map cached (dest=bus:sri, dest_offset=0x90020000, size=64k);
map not_cached (dest=bus:sri, dest_offset=0xb0020000, reserved, size=64k);
}
memory cpu3_dlmu
{
mau = 8;
size = 64k;
type = ram;
map cached (dest=bus:sri, dest_offset=0x90030000, size=64k);
map not_cached (dest=bus:sri, dest_offset=0xb0030000, reserved, size=64k);
}
memory lmuram
{
mau = 8;
size = 768K;
type = ram;
map cached (dest=bus:sri, dest_offset=0x90040000, size=768K);
map not_cached (dest=bus:sri, dest_offset=0xb0040000, reserved, size=768K);
}
memory cpu4_dlmu
{
mau = 8;
size = 64k;
type = ram;
map cached (dest=bus:sri, dest_offset=0x90100000, size=64k);
map not_cached (dest=bus:sri, dest_offset=0xb0100000, reserved, size=64k);
}
memory cpu5_dlmu
{
mau = 8;
size = 64k;
type = ram;
map cached (dest=bus:sri, dest_offset=0x90110000, size=64k);
map not_cached (dest=bus:sri, dest_offset=0xb0110000, reserved, size=64k);
}
memory edmem
{
mau = 8;
size = 4M;
type = ram;
map (dest=bus:sri, dest_offset=0x99000000, size=4M);
map (dest=bus:sri, dest_offset=0xb9000000, reserved, size=4M);
}
/*section 设置*/
#if (__VERSION__ >= 6003)
section_setup :vtc:linear
{
heap "heap" (min_size = (1k), fixed, align = 8); /* 最小堆区1k, 字节对齐8字节 */
}
#endif
/*
软件运行起始地址标志位
在程序中的入口函数
如
void _START(void)
{
Ifx_Ssw_jumpToFunction(__StartUpSoftware);
}
然后运行到函数Ifx_Ssw_jumpToFunction(__StartUpSoftware) 进行初始化
*/
section_setup :vtc:linear
{
start_address
(
symbol = "_START"
);
}
/*
min_size语句必须存在。
min_size值必须大于等于1。
最多可以指定一个align语句,一个grow语句和一个threads语句。
每个堆栈定义可以有一个或多个entry_points语句用于堆栈评估。symbol_name相对应编译器生成的.CALLS指令中名称
*/
section_setup :vtc:linear
{
stack "ustack_tc0" (min_size = 1k, fixed, align = 8);
stack "istack_tc0" (min_size = 1k, fixed, align = 8);
stack "ustack_tc1" (min_size = 1k, fixed, align = 8);
stack "istack_tc1" (min_size = 1k, fixed, align = 8);
stack "ustack_tc2" (min_size = 1k, fixed, align = 8);
stack "istack_tc2" (min_size = 1k, fixed, align = 8);
stack "ustack_tc3" (min_size = 1k, fixed, align = 8);
stack "istack_tc3" (min_size = 1k, fixed, align = 8);
stack "ustack_tc4" (min_size = 1k, fixed, align = 8);
stack "istack_tc4" (min_size = 1k, fixed, align = 8);
stack "ustack_tc5" (min_size = 1k, fixed, align = 8);
stack "istack_tc5" (min_size = 1k, fixed, align = 8);
}
/*Section setup for the copy table*/
/*
copy_unit是由启动代码移动数据的MAUs大小定义的。
dest语句只在启动代码初始化内存时被另一个没有ROM访问权限的处理器使用。
space_name是指一个已定义的地址空间。
*/
section_setup :vtc:linear
{
copytable
(
align = 4,
dest = linear,
table
{
symbol = "_lc_ub_table_tc0";
space = :tc0:linear, :tc0:abs24, :tc0:abs18, :tc0:csa;
},
table
{
symbol = "_lc_ub_table_tc1";
space = :tc1:linear, :tc1:abs24, :tc1:abs18, :tc1:csa;
},
table
{
symbol = "_lc_ub_table_tc2";
space = :tc2:linear, :tc2:abs24, :tc2:abs18, :tc2:csa;
},
table
{
symbol = "_lc_ub_table_tc3";
space = :tc3:linear, :tc3:abs24, :tc3:abs18, :tc3:csa;
},
table
{
symbol = "_lc_ub_table_tc4";
space = :tc4:linear, :tc4:abs24, :tc4:abs18, :tc4:csa;
},
table
{
symbol = "_lc_ub_table_tc5";
space = :tc5:linear, :tc5:abs24, :tc5:abs18, :tc5:csa;
}
);
}
作者:Z-ONE_00751242454
文章来源:上汽零束SOA开发者论坛
原文链接:https://bbs.z-onesoft.com/omp/community/front/api/page/mainTz?articleId=7745
Aurix 多核链接文件 lsl --- 上篇相关推荐
- 英飞凌 AURIX TC3XX 系列单片机的链接文件
前言 程序在完成编译后,每个".c"文件会生成".o"目标文件,此时代码无法通过目标文件运行,还需要通过链接文件为每个目标文件和系统标准库等链接起来,根据链接文 ...
- python下载文件保存_python 3.3 下载固定链接文件并保存的方法
python 3.3 下载固定链接文件并保存. import urllib.request print ("downloading with urllib") url = 'htt ...
- 第2周第4课:set_uid、set_gid、stick_bit、软(硬)链接文件
2019独角兽企业重金招聘Python工程师标准>>> 2.18 特殊权限set_uid 权限的标准写法是4位数,第1位表示特殊权限. 该权限仅针对二进制可执行文件,使文件在执行阶段 ...
- Windows下Libvirt Java API使用教程(三)- TLS认证访问和动态链接文件依赖
之前已经介绍过了libvirt api的上手使用方式: <Windows下Libvirt Java API使用教程(二)- 接口使用说明> <Windows下Libvirt Java ...
- 纯前端下载pdf链接文件,而不是打开预览的解决方案
纯前端下载pdf链接文件,而不是打开预览的解决方案 参考文章: (1)纯前端下载pdf链接文件,而不是打开预览的解决方案 (2)https://www.cnblogs.com/jackson-yqj/ ...
- python3下载文件-python 3.3 下载固定链接文件并保存的方法
python 3.3 下载固定链接文件并保存. import urllib.request print ("downloading with urllib") url = 'htt ...
- 【Android 逆向】Linux 文件分类 ( 普通文件 | 目录文件 | 链接文件 | 字符设备文件 | 管道文件 | 块设备文件 )
文章目录 一.Linux 文件分类 1.普通文件 2.链接文件 3.字符设备文件 4.管道文件 5.块设备文件 一.Linux 文件分类 Linux 文件分类 : " - " 表示 ...
- visual studio 添加链接文件
本文转载http://blog.163.com/zhongpenghua@yeah/blog/static/87727415201282432345613/ 那个有个箭头的文件就是链接文件了,添加方法 ...
- html链接文件不可用,PPT2013如何解决链接文件失效
工作中在做PPT时,经常需要添加一些视频或音频之类的链接文件.而我们拷贝到另外一台电脑上的时候,由于这些链接文件的路径变了,这些链接也就失效了.遇到链接失效怎么办?下面学习啦给大家分享解决链接失效的方 ...
- linux 常用命令整理----链接文件
ln 用法:ln -s /etc/issue /tmp/issue.soft ln /etc/issue /etc/issue.hard 如果加-s为软链接,类似于windows的快捷方式 不加-s为 ...
最新文章
- 2022-2028年中国输送胶管行业市场全景调查及投资前景趋势报告
- ueditor html显示图片,百度ueditor编辑器上传图片后img标签的title、alt属性优化简单方法...
- 【初探HTML本相】道之真谛不过自然,html标签脱俗还真
- uml+oopc嵌入式c语言开发精讲_当前火爆的嵌入式领域,为什么选择C语言作为开发语言?了解一下...
- VMX虚拟机环境下CentOS/Linux扩展磁盘空间,并且增加HOME目录的大小!
- 我的世界1.8.9无需正版的服务器,我的世界1period;8period;9服务器纯洁服地址 | 手游网游页游攻略大全...
- SAP License:赛锐信息访谈启示录(一)
- QQ域名拦截检测工具(含源码)
- 大智慧公式系统:条件选股之基本技巧
- 低版本VC2010打开高版本VC2012的方法
- go与python的前景_golang程序员前景怎么样?Python、Java、go语言的优势互比
- 0910期即将上市:优秀产品三部曲
- 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
- 交换机级联后网速在底层交换机变慢的问题
- 成功安装python后、在dos命令行窗口中-python在WIN运行时去掉DOS窗口显示的方法
- 数据库字符集utf8和utf8mb4的详细区别
- Python爬虫实战——签名软件设计(一)python POST模拟网页按钮点击
- Vue.js 中created方法的作用【学习】
- Mac M1配置Apache Tomcat
- 今日分享 不可思议的人体
热门文章
- 文墨绘学呵护那一点点光
- springboot 多模块 Found multiple @SpringBootConfiguration annotated classes
- leetcode简单之1076.项目员工II
- CentOS7中怎样设置静态IP
- html5 canvas背景特效,HTML5 Canvas炫酷背景动画特效
- Excel中常用技巧
- RPG游戏制作-03-人物行走及A*寻路算法
- Cascading介绍
- nginx 的proxy 时间讲解
- Bolt: Anonymous Payment Channels for Decentralized Currencies 学习笔记