分类 OS 下的文章

开启发现和共享

settings -> network & internet -> status -> change connection properties -> private settings -> network & internet -> status -> network and sharing center -> change advanced sharing settings -> private 全部选择 turn on

启动 SMB 共享支持

settings -> apps -> programs and features -> turn windows features on or off -> SMB 1.0/CIFS File sharing support

然后重启电脑。

连接服务器

  • 直接在 file explorer 中输入 ip 地址
  • win + r 里面输入 ip 地址。

you can't access this shared folder because your organization's security policies block unauthenticated guest access.

如果出现上面的错误,那么需要修改组策略。

  1. win + r 输入 gpedit.msc
  2. computer configuration -> administractive templates -> network -> lanman workstation
  3. enable insecure guest logons -> enabled.

参考:

https://www.jianshu.com/p/be7dc5875923
https://technoresult.com/fix-cant-access-this-shared-folder-because-your-organizations-security-policies/
https://www.kapilarya.com/fix-you-cant-access-this-shared-folder-because-your-organizations-security-policies-block-unauthenticated-guest-access
https://www.cnblogs.com/huny/p/12609184.html
https://www.techrepublic.com/article/how-to-connect-to-linux-samba-shares-from-windows-10/#:~:text=When%20Windows%2010%20was%20released%2C%20it%20seemingly%20broke,sharing%20of%20folders%2C%20this%20was%20a%20bad%20move
https://os.51cto.com/art/202104/658846.htm
https://www.pcoic.com/system/windows/2119.html

https://zhuanlan.zhihu.com/p/39038047

samba 共享的文件,被修改后,会被增加执行位。 要保留原来的属性,只需要修改 /etc/samba/smb.conf

[global]
......
      map archive = no

参考: https://stackoverflow.com/questions/20958888/preserving-file-permissions-for-samba-shares-when-file-is-edited https://en.wikipedia.org/wiki/Archive_bit https://www.linuxquestions.org/questions/linux-server-73/samba-adds-execute-flag-to-all-new-files-783263/ https://www.samba.org/samba/docs/using_samba/ch08.html

1. 我需要把 ubuntu 按键进行互换映射

原功能 目标功能 caps lctrl lctrl return return rctrl rctrl caps

sudo vim /usr/share/X11/xkb/keycodes/evdev

<RTRN> = 37;
<CAPS> = 105;
<LCTL> = 66;
<RCTL> = 36;

参考: https://blog.csdn.net/Elliott_Yoho/article/details/78650838

2. 我需要把 win10 的按键进行一样的互换映射,需要修改注册表,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 增加二进制 Scancode Map,具体值是:

00,00,00,00,00,00,00,00,05,00,00,00,1d,00,3a,00,1c,00,1d,00,
1d,e0,1c,00,3a,00,1d,e0,00,00,00,00

导出的注册表是:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,05,00,00,00,1d,00,3a,00,1c,00,1d,00,\
  1d,e0,1c,00,3a,00,1d,e0,00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes]
"00000402"="bg"
"00000404"="ch"
"00000405"="cz"
"00000406"="dk"
"00000407"="gr"
"00000408"="gk"
"00000409"="us"
"0000040a"="sp"
"0000040b"="su"
"0000040c"="fr"
"0000040e"="hu"
"0000040f"="is"
"00000410"="it"
"00000411"="jp"
"00000412"="ko"
"00000413"="nl"
"00000414"="no"
"00000415"="pl"
"00000416"="br"
"00000418"="ro"
"00000419"="ru"
"0000041a"="yu"
"0000041b"="sl"
"0000041C"="us"
"0000041d"="sv"
"0000041f"="tr"
"00000422"="us"
"00000423"="us"
"00000424"="yu"
"00000425"="et"
"00000426"="us"
"00000427"="us"
"00000442"="tk"
"00000452"="uk"
"0000046e"="sf"
"00000804"="ch"
"00000807"="sg"
"00000809"="uk"
"0000080a"="la"
"0000080c"="be"
"00000813"="be"
"00000816"="po"
"00000c04"="ch"
"00000c0c"="cf"
"00000c1a"="us"
"00001004"="ch"
"00001009"="us"
"0000100c"="sf"
"00001404"="ch"
"00001809"="us"
"00010402"="us"
"00010405"="cz"
"00010407"="gr"
"00010408"="gk"
"00010409"="dv"
"0001040a"="sp"
"0001040e"="hu"
"00010410"="it"
"00010415"="pl"
"00010418"="ro"
"00010419"="ru"
"0001041b"="sl"
"0001041f"="tr"
"00010426"="us"
"00010c0c"="cf"
"00010c1a"="us"
"00020402"="bg"
"00020408"="gk"
"00020409"="us"
"00020418"="ro"
"00020422"="us"
"00030402"="bg"
"00030409"="usl"
"00040402"="bg"
"00040409"="usr"
"00050408"="gk"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs]
"00000410"="141"
"0000041f"="179"
"00000442"="440"
"00010408"="220"
"00010410"="142"
"00010415"="214"
"0001041f"="440"
"00020408"="319"

参考: https://liang.blog.csdn.net/article/details/84637767?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control https://blog.csdn.net/lhdalhd1996/article/details/90741092

最近想在 f429 上面使用 mdk526 版本的 IDE,配合 HAL 和ucosiii。考虑到的方法是对比 v7 开发板的 ucosiii 和裸机程序,找出需要修改的地方,然后对比 v6 开发板的 ucosiii 和 裸机程序,然后把相应的修改融合起来即可。

- 阅读剩余部分 -

  1. 打补丁,patch -p1 < ../linux-2.6.22.6.patch 。 -p1 这个命令参数的意思是忽略补丁文件中目录的第一个 / 之前的内容。后面参数的意思是把指定目录中的 patch 文件打到当前目录。

  2. 配置。可以使用 find -name "*.defconfig" 查找一下内核当前支持的一些 board 的配置。找到 s3c2410_defconfig 比较相近,就执行 make s3c2410_defconfig 进行配置,这时候 s3c2410_defconfig 里面的配置就写入到 .config 文件中了。然后使用 make menuconfig 在 s3c2410_defconfig 的基础上进行修改。一般内核先配置 make s3c2410_defconfig,然后编译 make menuconfig。有时候厂家会提供 config_厂家,这时候只需 cp config_厂家 .config,然后 make menuconfig 就可以了。

  3. 编译内核直接用 make,但是给 uboot 用的内核需要用 make uImage 来编译,这个和正常的内核相比,多了一个头部内容。适合给 uboot 引导使用。

  4. uboot 中烧录内核使用 k 命令,这个命令具体可以在 cmd_menu.c 中找到 k 的具体内容, usbslave 1 0x30000000, nand erase kernel, nand write.jffs2 0x30000000 kernel (filesize)。 先接受内核到 0x30000000 内存中,然后擦除 nand 中 kernel 分区,然后从 0x30000000 内存地址处读取数据,写入 nand 中的 kernel 分区,写入(filesize) 大小。

  5. 如果删除了 root 分区,那么 内核启动到一定程度的时候,就会卡在那边。

  6. 内核编译的时候,根据 .config 生成 include/linux/autoconf.h 这个里面是对各个配置生成的详细的头文件,里面的 CONFIG_ 给各个 C语言的源码使用。.config 中设置为 y 或者 m,在 autoconfig.h 中宏定义就都是 1. 而 y 和 m 的区别体现在 子目录的 makefile 里面,比如说 drivers/net/makefile。在内核子目录中的 makefile 里面,配置为 y 和 m 是不同的, obj_y+= 这个会编译到内核里面去, obj_m+= 这个会编译为模块 ko 给内核加载。 配置还会出现在 include/config/auto.conf 中。配置的 y 和 m 先在 auto.conf 中自动生成好。

make uImage 时候,首先根据 .config 生成 autoconfig.h 给源代码使用,生成 auto.conf 给 顶层 makefile 包含,给子目录的 makefile 使用。

  1. linux-版本号 / Doc / kbuild 这里面的 makefile.txt 里面有内核 makefile 的详细讲解。 如果要编译为一个模块,类似的写法是:

    obj_m += ab.o
    ab_objs := a.o b.o

    这样 a.c, b.c 两个文件就会被先编译为 a.o, b.o,然后被链接为 ab.ko 这个模块。

  2. 当使用 make uImage 的时候,会使用顶层的 makefile,顶层 makefile 里面有 include (srctree)/arch/(ARCH)/Makefile , 这样就包含了 arm 这样架构目录下面的 makefile。顶层 makefile 里面还有 include /config/auto.conf,这样就包含了配置。 uImage 的依赖是 vmlinux, vmlinux 是真正的内核文件,加上了头部之后,才是 uImage。如果直接就是 make 的话,那么就是 all,all 依赖的也是 vmlinux。 make uImage V=1 这个命令是让编译时候打印出来的信息更加详细。打印信息中的 ld -T 后面的 lds 文件是具体的链接脚本。第一个编译的文件是 arch/arm/kernel/head.o ,这个是 head.S 汇编文件,链接脚本是 arch/arm/kernel/vmlinux.lds

tq2440 里面需要编译的是 zImage,然后使用配套的 uboot,可以直接下载 zImage 内核并启动。 tq2440 make zImage 的时候,会提示错误 Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373. /opt/ARM/mini6410/linux/linux-2.6.38/kernel/Makefile:140: recipe for target 'kernel/timeconst.h' failed make[1]: [kernel/timeconst.h] Error 255 Makefile:916: recipe for target 'kernel' failed make: [kernel] Error 2

报错信息提示我们文件kernelkernel/timeconst.pl的第373不能使用'defined(@array)',将kernel/timeconst.pl中第373行的defined()去掉只留下@val就可以了. 考虑去掉defined(),改为: 372         @val = @{canned_values{hz}}; 373         if (!@val) { 374                 @val = compute_values($hz); 375         }

关于 zImage 和 uImage 的差别,可以参考 https://www.cnblogs.com/linhaostudy/p/6735697.html

  1. compress 目录下面的 head.S 是为了压缩内核的。如果内核过大,可以压缩内核,然后在内核前面加上自解压代码,这样组合起来变成一个小一点的内核。运行的时候,先自解压,之后再执行内核。

  2. lookup_machine_type 中的
    
    3:      .long .
         .long arch_info_begin
         .long arch_info_end

adr r3, 3b @ 让 r3 等于 标号3所在地方的物理地址。 ldmia r3, {r4, r5, r6} @ 让 r4 等于 r3 的虚拟地址,也就是 标号3 的虚拟地址, 让 r5 等于 arch_info_begin, r6 等于 arch_info_end. sub r3, r3, r4 @ r3 等于虚拟地址和物理地址之间的偏移 add r5, r5, r3 @ r5 是对应的 物理地址 add r6, r6, r3 @ r6 是对应的 物理地址。


11. head.S 中内核启动时,首先判断是否支持 cpu,然后判断是否支持 单板(这个通过 u-boot 中 执行内核的 kernel 函数调用时传入的 machine_id),然后建立页表, 使能 mmu,然后跳转 start_kernel 来处理 u-boot 传入的启动参数。

start_kernel setup_arch //解析 u-boot 传入的启动参数 setup_command_line //解析 u-boot 传入的启动参数 parse_early_param do_early_param 从 setup_start 到 setup_end,调用 early 函数。 unknown_bootoption obsolute_checksetup 从 setup_start 到 setup_end,调用非 early 函数。 rest_init kernel_init prepare_namespace mount_root 这样就能挂载根文件系统了。 init_post 这个函数里面 打开 console,然后执行 init 等应用程序


挂载根文件系统按照 u-boot 中的 boot_args 这个参数来做。 uboot 中的 boot_args 里面的 root=/dev/mtdblock3 是和 linux 中的 arch/arm/plat-s3c24xx 中的 common-smdk.c 定义的 smdk_default_nand_part[] 这个分区结构体数组对应的。

关闭迅雷极速版升级提示 Step 1: 退出迅雷极速版,进入迅雷安装目录下的 Data 目录,删除 ThunderPush 文件夹。 Step 2: 在 Data 目录下新建一个文本文件,并命名为 ThunderPush,删除后缀名 .txt。(需要勾选显示 “文件的扩展名”)

Step 3: 右键 ThunderPush 文件 -> 属性,勾选 “只读”;安全 -> 编辑 -> 完全控制勾选 “拒绝”,应用。

完成!再打开迅雷极速版应该就不会弹出升级提示弹窗了。o( ̄▽ ̄)d 关闭迅雷自启服务 如果查看任务管理器的话,我们会发现,开机后无论迅雷是否运行,都会自动启动 ThunderPlatform.exe 进程和 XLServicePlatform 服务。

如果在使用迅雷的话,运行两个程序没啥问题。但你说咱们没打开迅雷,它默默地在后台跑这两个程序占用资源干什么呢…… 打开记事本输入下面代码,保存为 killxltask.bat,然后放入 [C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup] 开机自启文件夹中。 net stop XLServicePlatform taskkill /F /im ThunderPlatform.exe 开机后会自动运行该脚本,清除这两个程序。

或者把文件夹里有个“OnlineInstall.exe”的文件删除掉,简历一个假的并禁止访问应该也可以。

  1. OSTaskCreate 的参数中有一个 void *p_ext,这个参数用来传递额外的信息,可以用来传递数组,结构体等等。

  2. AppTaskStart --> CPU_Init --> CPU_TS_Init --> CPU_TS_TmrInit --> BSP_CPU_ClkFreq() 这个函数是需要用户自己实现的,是MCU的主频。 对于STM32而言,返回的是 HCLK_Frequency。

  3. mutex 和 sem 的区别是高优先级任务在等待信号量时的表现。比如说低优先级任务已经申请到了打印机的信号量,正在打印的时候,高优先级任务也要使用打印机,开始申请信号量,如果是 mutex,那么高优先级任务的打印数据会插入到低优先级的打印数据中,造成打印混乱的现象,如果是 sem,那么高优先级任务会等待低优先级任务打印完成并释放信号量后,才能开始打印。

win7 为了使用英文的 pcb 软件,把语言包改为英文版后,碰到一部分中文会变成乱码。通过下面方法可以识别:

control panel --> region and language --> administrative --> change system locale --> chinese (sim, prc).