U-boot 命令及软件所有权相关探讨
1. U-boot 相关命令介绍
U-boot 有众多实用的命令,这些命令可分为不同的类别,下面为大家详细介绍。
1.1 NAND 相关命令
| 命令 | 功能描述 |
|---|---|
| nand info | 显示可用的 NAND 设备 |
| mtdparts | 列出 NAND 分区 |
| nand erase [clean] [,offset.,size.] | 从指定偏移量开始擦除指定大小的字节。若未指定偏移量,则擦除整个芯片 |
| nand scrub | 真正擦除整个芯片,包括坏块,此操作被认为“不安全” |
| nand createbbt | 创建坏块表 |
| nand bad | 列出坏块 |
| nand read[.raw] ,address.,offset. |,partition.,size. | 从闪存读取指定大小的字节到指定地址的 RAM 中,可从数值偏移量或分区名指定位置读取。.raw 修饰符可绕过 ECC 直接访问闪存 |
| nand write[.raw] ,address.,offset. | ,partition.,size. | 将指定地址的 RAM 中的指定大小字节写入闪存,可写入数值偏移量或分区名指定位置。.raw 修饰符可绕过 ECC 直接访问闪存 |
1.2 执行控制命令
- boot :执行默认启动,即运行 bootcmd。
- bootd :与 boot 功能相同,执行默认启动,运行 bootcmd。
- bootm ,addr. [,param. . . .] :从内存中启动如操作系统等镜像。镜像头从指定地址开始,包含操作系统类型、压缩情况、加载和入口点地址等必要信息。参数是传递给操作系统的可选参数。操作系统镜像会被复制到 RAM 中,必要时进行解压缩,然后将控制权转移到入口点地址。对于 Linux,可识别两个可选参数:initrd RAM 磁盘镜像的地址和扁平化设备树(FDT)Blob 的地址。若要使用 FDT 启动内核但没有 initrd,将第二个参数设为“-”。需注意,镜像可从 RAM 启动,如通过 TFTP 下载的镜像,但要确保压缩镜像不与解压缩镜像使用的内存区域重叠。
- bootz ,addr. [initrd[:size]] [fdt] :启动存储在指定地址内存中的 Linux zImage。initrd 是指定大小的 initrd 镜像地址,fdt 是扁平化设备树 Blob 的地址。若要使用 FDT 启动内核但没有 initrd,将第二个参数设为“-”。
- go ,addr. [,param. . . .] :将控制权转移到从指定地址开始的“独立”应用程序,并传递可选参数。这些程序不需要操作系统的复杂环境。
1.3 下载命令
有三个命令可通过 TFTP 从网络启动镜像,其中两个在执行文件下载前还会获取 IP 地址。
-
bootp ,load_addr. [,filename.]
:使用 bootp 协议获取 IP 地址,然后将指定文件名的文件下载到指定加载地址。若未指定文件名,则使用 bootfile 的值。
-
nfs ,load_addr. [,filename.] [[,hostIPaddr.:],filename.]
:使用 NFS 协议从网络启动镜像。若未指定主机 IP 地址,则使用 serverip 的值;若未指定文件名,则使用 bootfile 的值。
-
tftpboot,load_addr.,filename. (tftp)
:仅下载文件,假设客户端已拥有 IP 地址,该地址可以是静态分配的或通过 DHCP 获取的。
-
dhcp
:使用 DHCP 获取 IP 地址。
-
loadb ,offset.
:通过串口接受二进制镜像下载到指定地址。先在 u-boot 中启动此命令,然后在主机端发起传输。
-
loads ,offset.
:通过串口接受 S 记录文件下载到指定地址。
1.4 环境变量命令
| 命令 | 功能描述 |
|---|---|
| printenv [,name. . . .] | 打印一个或多个环境变量的值。无参数时,列出所有环境变量;有参数时,列出指定变量的值 |
| setenv,name. [,value.] | 一个参数时,从 u-boot 环境中移除指定变量并回收存储;两个参数时,将指定变量设置为指定值,这些更改仅在 RAM 中进行。注意:变量名和值之间用空格分隔,而非“=” |
| saveenv | 将环境写入持久存储 |
| run ,name. [. . .] | 将环境变量的值视为一个或多个 u-boot 命令并执行。若指定多个变量,则按顺序执行 |
| bootd (boot) | 等同于 run bootcmd,执行默认启动命令 |
2. U-boot 环境变量介绍
U-boot 环境存储在持久存储中,启动时复制到 RAM,用于配置系统,通过 CRC32 校验和保护。以下是一些 U-boot 识别的环境变量:
| 变量名 | 功能描述 |
| — | — |
| autoload | 若设置为“no”或任何以“n”开头的字符串,rarp 和 bootp 命令仅获取配置信息,不尝试使用 TFTP 下载镜像 |
| autostart | 若设置为“yes”,使用 rarpb、bootp 或 tftp 命令加载的镜像将通过内部调用 bootm 命令自动启动 |
| baudrate | 指定控制台串口的波特率,仅提供预定义的波特率设置列表。执行 setenv baudrate ,n. 命令后,u-boot 需在新速率下接收到换行符才会应用新速率,若失败则需重置板子并恢复旧波特率 |
| bootargs | 该变量的值作为启动参数传递给 Linux 内核,即“命令行” |
| bootcmd | 定义一个命令字符串,若 bootdelay 变量也定义为非负值且初始倒计时未被中断,则会自动执行 |
| bootdelay | 在执行 bootcmd 变量内容前等待的秒数,可在 bootcmd 序列开始前按任意键中断延迟。设置为 0 会立即执行 bootcmd 并禁用与 u-boot 的交互;设置为 21 则禁用自动启动 |
| bootfile | 任何下载命令加载的默认镜像名称 |
| ethaddr | 板上第一个或唯一以太网接口(Linux 中为 eth0)的 MAC 地址,MAC 地址为 48 位,用六个十六进制数字对表示,用点分隔 |
| eth1addr, eth2addr | 存在时,分别为第二个和第三个以太网接口的 MAC 地址 |
| ipaddr | 为目标板设置用于 TFTP 下载的 IP 地址 |
| loadaddr | 如 tftpboot、loads 和 bootm 等命令在 RAM 中的默认缓冲区地址。代码中似乎有一个默认加载地址 0x82000000,但未明确记录 |
| serverip | tftpboot 和 nfs 命令使用的 TFTP 或 NFS 服务器的 IP 地址 |
| serial# | 包含硬件标识(如类型、序列号等)的字符串,通常在板制造期间设置,设置后 U-boot 拒绝删除或覆盖该变量 |
| verify | 若设置为“n”或“no”,在 bootm 命令中禁用对整个镜像的校验和计算,以牺牲安全性换取启动速度,但仍会验证头校验和 |
以下环境变量可由网络启动命令(bootp、dhcp 或 tftp)根据启动服务器提供的信息自动更新:
- bootfile
- dnsip:域名服务器的 IP 地址
- gatewayip:网关(路由器)的 IP 地址
- hostname:目标主机名
- ipaddr
- netmask:子网掩码
- rootpath:NFS 服务器上根文件系统的路径
- serverip
- filesize:使用最后一次 bootp、nfs 或 tftp 命令下载的文件大小(以字节为十六进制字符串表示)
3. 软件所有权问题探讨
数字信息技术让信息的复制和修改变得更加容易,为世界做出了贡献。然而,并非所有人都希望如此,版权制度赋予了软件程序“所有者”,他们中的大多数试图阻止公众从软件中获得潜在利益,希望自己成为唯一能够复制和修改我们使用的软件的人。
3.1 版权制度与数字技术的冲突
版权制度与印刷技术一同发展,印刷是一种大规模复制生产技术。版权制度与这种技术契合良好,因为它仅限制大规模复制生产者,并未剥夺书籍读者的自由。普通读者没有印刷机,只能用笔墨复制书籍,很少有读者因此被起诉。
但数字技术比印刷机更加灵活,信息以数字形式存在时,人们可以轻松复制并与他人分享。这种灵活性与版权制度格格不入,这也是如今执行软件版权时采取越来越恶劣和严厉措施的原因。例如软件出版商协会(SPA)的以下四种做法:
- 大规模宣传,声称帮助朋友违反软件所有者规定是错误的。
- 招募告密者,让他们举报同事和同行。
- 在警方协助下对办公室和学校进行突击检查,要求人们证明自己没有非法复制软件。
- 应 SPA 请求,美国政府起诉像麻省理工学院的 David LaMacchia 这样的人,他并未被指控复制软件,仅仅是因为未对复制设备进行监管且未对其使用进行审查。
这些做法与前苏联的情况类似,在前苏联,每台复印机都有警卫防止非法复制,个人只能秘密复制信息并以“地下出版物”的形式传递。当然,两者存在区别:前苏联控制信息的动机是政治因素,而美国是为了利润。但影响我们的是这些行为,而非动机。任何阻止信息共享的尝试,无论出于何种原因,都会导致相同的方法和严厉程度。
3.2 软件所有者的论点及反驳
软件所有者为控制我们使用信息的权力提出了几种论点:
-
污名化
:所有者使用“盗版”和“盗窃”等诋毁性词汇,以及“知识产权”和“损害”等专业术语,向公众暗示一种简单的类比,即将程序与物理对象相提并论。我们对物质对象财产的观念和直觉是关于是否有权从他人那里拿走物品,这并不直接适用于复制行为,但所有者却要求我们这样应用。
-
夸大其词
:所有者声称用户自行复制程序会使他们遭受“损害”或“经济损失”。但实际上,复制行为对所有者没有直接影响,也不会伤害任何人。只有当复制者原本会从所有者那里购买软件时,所有者才会有损失。稍加思考就会发现,大多数复制者原本不会购买软件,但所有者却将每一个复制者都视为潜在购买者来计算损失,这种说法显然是夸大其词。
-
诉诸法律
:所有者经常描述当前法律状况以及他们可以威胁我们的严厉惩罚。这种做法暗示当今法律反映了无可置疑的道德观念,同时又敦促我们将这些惩罚视为自然事实,不应归咎于任何人。但法律并不决定是非对错,例如 40 年前,美国许多州规定黑人不能坐在公共汽车前排,但只有种族主义者才会认为这种行为是错误的。
-
自然权利论
:作者常常声称与自己编写的程序有特殊联系,进而断言他们对程序的愿望和利益比其他人甚至整个世界的都重要。但实际上,通常持有软件版权的是公司而非作者,我们却被要求忽略这种差异。人们可能会对作者的自然权利主张产生同情,主要有两个原因。一是过度类比物质对象,例如自己煮的意大利面被别人吃了会有损失,但运行或修改一个程序对作者的影响是间接的,给朋友复制程序对自己和朋友的影响远大于对作者的影响,作者不应有权力阻止这些行为。二是人们被灌输作者的自然权利是社会公认且无可置疑的传统,但实际上,美国宪法起草时就提出并坚决拒绝了作者自然权利的观点,宪法只允许版权制度存在而不要求必须有版权制度,且规定版权必须是暂时的,其目的是促进进步而非奖励作者。真正的社会传统是版权会侵犯公众的自然权利,只有为了公众利益才能被合理化。
-
经济论
:最后一个支持软件所有权的论点是,这会促使更多软件的生产。这个论点至少采用了合理的方法,基于满足软件用户这一有效目标,而且从经验来看,人们在得到丰厚报酬时会生产更多东西。但该论点存在缺陷,它假设差异仅仅在于我们需要支付的费用,认为无论软件是否有所有者,“软件生产”都是我们想要的。人们容易接受这个假设,因为这符合我们对物质对象的经验。例如,一个三明治,无论免费还是付费获得,其味道、营养价值和食用次数都相同,是否从所有者那里获得只影响我们之后的金钱数量。但对于软件,如果有所有者,这会极大影响软件本身以及购买副本后可以做的事情,差异不仅仅是金钱问题。软件所有权制度鼓励软件所有者生产某些东西,但并非社会真正需要的。社会需要公民能够真正获取的信息,如人们可以阅读、修复、调整和改进的程序,而不是只能操作的黑匣子;社会也需要自由,当程序有所有者时,用户会失去控制自己生活一部分的自由;最重要的是,社会需要鼓励公民的自愿合作精神,而软件所有者将自然地帮助邻居的行为称为“盗版”,污染了社会的公民精神。
综上所述,我们说自由软件关乎自由,而非价格。虽然支持软件所有权的经济论点有误,但经济问题确实存在。有些人出于写作乐趣、获得赞赏和喜爱而编写有用的软件,但如果我们需要更多软件,就需要筹集资金。多年来,自由软件开发者尝试了各种筹集资金的方法,并取得了一些成功,如通过定制增强、销售支持服务、慈善组织筹款等方式。虽然目前自由软件运动规模还较小且年轻,但美国听众支持的广播表明,不强迫每个用户付费也有可能支持大规模的活动。作为计算机用户,当朋友请求复制软件时,拒绝是错误的,因为合作比版权更重要。我们应该追求自由软件,以实现与其他用户公开自由地合作、学习软件工作原理、修复软件等权利。
4. 自由软件的现状与发展途径
为了推动自由软件的发展,满足社会对自由、可用软件的需求,开发者们已经探索出了多种途径来解决资金筹集问题,以下为大家详细介绍这些途径及其成效。
4.1 定制增强模式
部分开发者通过为客户提供定制增强服务来获取收入。例如,有些开发者会因编写软件的乐趣而创作自由软件,之后针对客户的特定需求对软件进行定制化的增强。这些定制增强的功能会被添加到标准发布版本中,最终让广大公众受益。客户付费是为了让开发者优先处理他们所期望的功能增强,而非开发者原本认为的最高优先级功能。这种模式既满足了客户的个性化需求,又促进了自由软件的不断完善和发展。
4.2 慈善组织筹款
像自由软件基金会(FSF)这样的免税慈善组织,通过多种方式为自由软件的开发筹集资金。他们销售 GNU CD - ROM、T 恤、手册和豪华版发行物等产品,这些产品用户可以自由复制和修改。此外,基金会还接受捐赠。目前,FSF 已经拥有五名程序员组成的开发团队,以及三名负责邮购业务的员工。这种慈善模式为自由软件的开发提供了稳定的资金支持,有助于推动自由软件项目的持续进行。
4.3 销售支持服务
一些自由软件开发者通过销售支持服务来盈利。例如 Cygnus Support,在其员工构成中,约 15% 的员工活动集中在自由软件的开发上。对于一家软件公司来说,这个比例是相当可观的。通过提供专业的技术支持服务,开发者既能获得经济收入,又能进一步推广和完善自由软件。
4.4 企业与机构资助
许多企业和机构认识到自由软件的价值,纷纷出资支持自由软件的开发。例如,英特尔、摩托罗拉、德州仪器和模拟器件等公司联合资助了用于 C 语言的自由 GNU 编译器的持续开发。美国空军也曾资助过用于 Ada 语言的 GNU 编译器的开发,他们认为这是获得高质量编译器最具成本效益的方式。虽然空军的资助已经结束,但该编译器目前仍在使用,并且其维护工作由商业资金支持。
下面用一个 mermaid 流程图来展示自由软件发展的资金筹集途径:
graph LR
A[自由软件发展] --> B[定制增强模式]
A --> C[慈善组织筹款]
A --> D[销售支持服务]
A --> E[企业与机构资助]
B --> B1[客户付费定制功能]
B --> B2[功能添加到标准版本]
C --> C1[销售产品]
C --> C2[接受捐赠]
D --> D1[提供技术支持服务]
E --> E1[企业联合资助]
E --> E2[机构专项资助]
5. 自由软件的意义与我们的选择
自由软件不仅仅是一种技术产物,更是一种关乎社会价值和个人权利的理念。它对于社会的发展和个人的自由具有重要意义。
5.1 自由软件对社会的意义
- 信息可用性 :社会需要真正能被公民获取的信息,自由软件提供了这样的机会。人们可以阅读、修复、调整和改进自由软件,而不仅仅是操作它。这使得软件不再是一个封闭的黑匣子,而是成为了可以被研究和改进的工具,促进了知识的传播和技术的进步。
- 个人自由 :当软件有所有者时,用户在使用软件时会受到诸多限制,失去了控制自己生活一部分的自由。而自由软件赋予了用户自由使用、修改和分发软件的权利,让用户能够真正掌控自己的数字生活。
- 合作精神 :自由软件鼓励人们之间的自愿合作。软件所有者将帮助邻居分享软件的行为定义为“盗版”,这种观念污染了社会的公民精神。而自由软件强调合作的自然性和正当性,有助于营造一个积极、互助的社会环境。
5.2 我们应有的选择
作为计算机用户,我们在日常使用软件的过程中面临着选择。当我们使用的是专有软件,而朋友请求复制时,拒绝是错误的,因为合作比版权更重要。但仅仅进行地下的、隐蔽的合作并不能构建一个良好的社会。我们应该公开、自豪地选择自由软件,拒绝专有软件。
我们有权利与其他使用软件的人公开、自由地合作,有权利学习软件的工作原理,并将这些知识传授给学生。当软件出现问题时,我们也有权利聘请自己喜欢的程序员来修复它。自由软件为我们提供了实现这些权利的途径,我们应该积极拥抱自由软件,为推动软件行业的健康发展和社会的进步贡献自己的力量。
以下是一个表格总结自由软件与专有软件的区别:
| 对比项 | 自由软件 | 专有软件 |
| — | — | — |
| 信息获取 | 可阅读、修复、调整和改进 | 通常为黑匣子,难以深入了解 |
| 用户自由 | 拥有自由使用、修改和分发的权利 | 受版权限制,使用受限 |
| 合作精神 | 鼓励自愿合作 | 可能抑制合作,将分享视为“盗版” |
总之,自由软件代表着一种更加开放、自由和合作的软件发展模式。虽然目前自由软件运动规模还较小且年轻,但通过各种资金筹集途径和社会各界的支持,它有着广阔的发展前景。我们每个人都应该认识到自由软件的重要意义,并在实际行动中做出正确的选择,为实现一个更加自由、平等和创新的数字社会而努力。
超级会员免费看
24

被折叠的 条评论
为什么被折叠?



